a „oeÙ"ã@sVdZddlZddlZddlZddlmZddlmZddlm Z ddl m Z m Z ddl mZdd lmZmZdd lmZdd lmZdd lmZdd lmZdd„Zeedœdd„Zeee edœdd„Zeee edœdd„Zeee e edœdd„Zee edœdd„Z dd„Z!dd „Z"d!d"„Z#d#d$„Z$d%d&„Z%eeeed'œd(d)„Z&d*d+„Z'dS),z› Handling of Core Metadata for Python packages (including reading and writing). See: https://packaging.python.org/en/latest/specifications/core-metadata/ éN)Úmessage_from_file)ÚMessage)ÚNamedTemporaryFile)ÚOptionalÚList)Ú rfc822_escapeé)Ú_normalizationÚ_reqs)ÚMarker)Ú Requirement)ÚVersion)ÚSetuptoolsDeprecationWarningcCs&t|ddƒ}|dur"tdƒ}||_|S)NÚmetadata_versionú2.1)Úgetattrr r)ÚselfÚmv©rú:C:\Program Files\Certbot\pkgs\setuptools\_core_metadata.pyÚget_metadata_versions  r)ÚcontentÚreturnc CsJ| ¡}t|ƒdkr |d ¡Sd |d ¡t d |dd…¡¡f¡S)zFReverse RFC-822 escaping by removing leading whitespaces from content.rrÚ N)Ú splitlinesÚlenÚlstripÚjoinÚtextwrapÚdedent)rÚlinesrrrÚrfc822_unescapes  r!)ÚmsgÚfieldrcCs||}|dkrdS|S)zRead Message header field.ÚUNKNOWNNr©r"r#ÚvaluerrrÚ_read_field_from_msg'sr'cCst||ƒ}|dur|St|ƒS)z4Read Message header field and apply rfc822_unescape.N)r'r!r%rrrÚ_read_field_unescaped_from_msg/s r(cCs| |d¡}|gkrdS|S)z9Read Message header field and return all results as list.N)Zget_all)r"r#ÚvaluesrrrÚ_read_list_from_msg7s r*)r"rcCs | ¡ ¡}|dks|sdS|S)Nr$)Z get_payloadÚstrip)r"r&rrrÚ_read_payload_from_msg?s  r,cCsFt|ƒ}t|dƒ|_t|dƒ|_t|dƒ|_t|dƒ|_t|dƒ|_d|_t|dƒ|_ d|_ t|dƒ|_ t|d ƒ|_ t |d ƒ|_t |d ƒ|_|jdur°|jtd ƒkr°t|ƒ|_t|dƒ|_d |vrÖt|d ƒ d¡|_t|dƒ|_t|dƒ|_|jtdƒk�r$t|dƒ|_t|dƒ|_t|dƒ|_nd|_d|_d|_t|dƒ|_dS)z-Reads the metadata values from a file object.zmetadata-versionÚnameÚversionÚsummaryÚauthorNz author-emailz home-pagez download-urlÚlicenseÚ descriptionrÚkeywordsú,ÚplatformZ classifierz1.1ÚrequiresÚprovidesÚ obsoletesz license-file)rr rr'r-r.r2r0Ú maintainerÚ author_emailÚmaintainer_emailÚurlÚ download_urlr(r1Úlong_descriptionr,Úsplitr3r*Ú platformsZ classifiersr6r7r8Ú license_files)rÚfiler"rrrÚ read_pkg_fileFs8               rCcCs.d|vr*d}t d|¡| ¡ d¡d}|S)zF Quick and dirty validation for Summary pypa/setuptools#1390. rzBnewlines are not allowed in `summary` and will break in the futurezInvalid config.r)rÚemitr+r?)Úvalr"rrrÚ single_lineos  rFc CsÈd}tj |d¡}z”tdd|dd�� }|j}| |¡Wdƒn1sJ0Yt t |¡j ¡}t  ||tj Btj B¡t  ||¡W|rÄtj |¡rÄt |¡n|rÂtj |¡rÂt |¡0dS)z.Write the PKG-INFO file into the release tree.ÚzPKG-INFOÚwzutf-8F)ÚencodingÚdirÚdeleteN)ÚosÚpathrrr-Úwrite_pkg_fileÚstatÚS_IMODEÚlstatÚst_modeÚchmodÚS_IRGRPÚS_IROTHÚreplaceÚexistsÚremove)rÚbase_dirZtempÚfinalÚfZ permissionsrrrÚwrite_pkg_info}s( ÿr\csÆ| ¡}‡fdd„}|dt|ƒƒ|d| ¡ƒ|d| ¡ƒ| ¡}|rX|dt|ƒƒd}|D]&\}}t||dƒ}|dur`|||ƒq`| ¡} | r¢|d t| ƒƒ|j   ¡D]} |d d | ƒq¬d   |  ¡¡} | rÜ|d | ƒ|  ¡pæg} | D]} |d| ƒqì| ˆd| ¡¡| ˆd| ¡¡| ˆd| ¡¡| ˆd| ¡¡t|dƒ�r\|d|jƒ|j�rp|d|jƒ| ˆd|j�p‚g¡t|ˆƒ| ¡}|�rˆ d|¡| d¡�sˆ d¡dS)z0Write the PKG-INFO format data to a file object.csˆ d||f¡dS)Nz%s: %s )Úwrite)Úkeyr&©rBrrÚ write_field”sz#write_pkg_file..write_fieldzMetadata-VersionÚNamer ZSummary))z Home-pager<)z Download-URLr=)ZAuthorr0)z Author-emailr:)Z Maintainerr9)zMaintainer-emailr;NZLicensez Project-URLz%s, %sr4ZKeywordsZPlatformZ ClassifierZRequiresZProvidesZ ObsoletesÚpython_requireszRequires-PythonzDescription-Content-Typez License-Filez %sr)rÚstrZget_nameZ get_versionZget_descriptionrFrZ get_licenserZ project_urlsÚitemsrZ get_keywordsZ get_platformsZ _write_listZget_classifiersZ get_requiresZ get_providesZ get_obsoletesÚhasattrrbZlong_description_content_typerAÚ_write_requirementsZget_long_descriptionr]Úendswith)rrBr.r`r/Zoptional_fieldsr#ÚattrZattr_valr1Z project_urlr3r@r5r>rr_rrN�sN            rNc Cs¦t |j¡D]}| d|›d�¡q i}|j ¡D]n\}}| d¡\}}}| ¡}t  |¡} | rnt ||| |ƒt  |¡D]&}t || | ¡ƒ} | d| ›d�¡qxq2|S)NzRequires-Dist: rú:) r ÚparseZinstall_requiresr]Zextras_requirerdÚ partitionr+r Z safe_extraÚ_write_provides_extraZ parse_stringsÚ_include_extra) rrBÚreqÚprocessed_extrasZaugmented_extraZreqsZ unsafe_extraÚ_Ú conditionÚextraÚrrrrrfÕs rf)rnrrrqrcCsbt|ƒ}|jrd|j›d�nd|r.d|›d�nd|r>d|›�ndf}td dd„|Dƒ¡ƒ|_|S)Nú(ú)z extra == ú and css|]}|r|VqdS)Nr)Ú.0ÚxrrrÚ ðóz!_include_extra..)r Zmarkerr r)rnrrrqrsÚpartsrrrrmésýrmc CsV| |¡}||kr8tjdd|›d|›d|›d�dd�n|||<| d|›d �¡dS) Nz8Ambiguity during "extra" normalization for dependencies.z rvz/ normalize to the same value: zW In future versions, setuptools might halt the build process. z!https://peps.python.org/pep-0685/)Zsee_urlzProvides-Extra: r)ÚgetrrDr])rBroÚsafeZunsafeZpreviousrrrrlôs ÿÿþù rl)(Ú__doc__rLrOrZemailrZ email.messagerZtempfilerÚtypingrrZdistutils.utilrrGr r Zextern.packaging.markersr Zextern.packaging.requirementsr Zextern.packaging.versionr Úwarningsrrrcr!r'r(r*r,rCrFr\rNrfrmrlrrrrÚs4        )E