a oe"@sVdZddlZddlZddlZddlmZddlmZddlm Z ddl m Z m Z ddl mZdd lmZmZdd lmZdd lmZdd lmZdd lmZddZeedddZeee edddZeee edddZeee e edddZee edddZ ddZ!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)OptionalList) rfc822_escape)_normalization_reqs)Marker) Requirement)Version)SetuptoolsDeprecationWarningcCs&t|dd}|dur"td}||_|S)Nmetadata_version2.1)getattrr r)selfmvr:C:\Program Files\Certbot\pkgs\setuptools\_core_metadata.pyget_metadata_versions  r)contentreturnc CsJ|}t|dkr |dSd|dtd|ddfS)zFReverse RFC-822 escaping by removing leading whitespaces from content.rr N) splitlineslenlstripjointextwrapdedent)rlinesrrrrfc822_unescapes  r!)msgfieldrcCs||}|dkrdS|S)zRead Message header field.UNKNOWNNrr"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_payloadstrip)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 krt||_t|d|_d |vrt|d d|_t|d|_t|d|_|jtdkr$t|d|_t|d|_t|d|_nd|_d|_d|_t|d|_dS)z-Reads the metadata values from a file object.zmetadata-versionnameversionsummaryauthorNz author-emailz home-pagez download-urllicense descriptionrkeywords,platformZ classifierz1.1requiresprovides obsoletesz license-file)rr rr'r-r.r2r0 maintainer author_emailmaintainer_emailurl download_urlr(r1long_descriptionr,splitr3r* platformsZ classifiersr6r7r8 license_files)rfiler"rrr read_pkg_fileFs8               rCcCs.d|vr*d}td||dd}|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)remitr+r?)valr"rrr single_lineos  rFc Csd}tj|d}ztdd|dd }|j}||Wdn1sJ0Ytt|j }t ||tj Btj Bt ||W|rtj|rt|n|rtj|rt|0dS)z.Write the PKG-INFO file into the release tree.zPKG-INFOwzutf-8F)encodingdirdeleteN)ospathrrr-write_pkg_filestatS_IMODElstatst_modechmodS_IRGRPS_IROTHreplaceexistsremove)rbase_dirZtempfinalfZ permissionsrrrwrite_pkg_info}s( r\cs|}fdd}|dt||d||d||}|rX|dt|d}|D]&\}}t||d}|dur`|||q`|} | r|d t| |j D]} |d d | qd | } | r|d | | pg} | D]} |d| q|d||d||d||d|t|dr\|d|j|jrp|d|j|d|jpgt||}|rˆd||dsˆddS)z0Write the PKG-INFO format data to a file object.csd||fdS)Nz%s: %s )write)keyr&rBrr write_fieldsz#write_pkg_file..write_fieldzMetadata-VersionNamer ZSummary))z Home-pager<)z Download-URLr=)ZAuthorr0)z Author-emailr:)Z Maintainerr9)zMaintainer-emailr;NZLicensez Project-URLz%s, %sr4ZKeywordsZPlatformZ ClassifierZRequiresZProvidesZ Obsoletespython_requireszRequires-PythonzDescription-Content-Typez License-Filez %sr)rstrZget_nameZ get_versionZget_descriptionrFrZ get_licenserZ project_urlsitemsrZ get_keywordsZ get_platformsZ _write_listZget_classifiersZ get_requiresZ get_providesZ get_obsoleteshasattrrbZlong_description_content_typerA_write_requirementsZget_long_descriptionr]endswith)rrBr.r`r/Zoptional_fieldsr#attrZattr_valr1Z project_urlr3r@r5r>rr_rrNsN            rNc Cst|jD]}|d|dq i}|jD]n\}}|d\}}}|}t |} | rnt ||| |t |D]&}t || |} |d| dqxq2|S)NzRequires-Dist: r:) r parseZinstall_requiresr]Zextras_requirerd partitionr+r Z safe_extra_write_provides_extraZ parse_strings_include_extra) rrBreqprocessed_extrasZaugmented_extraZreqsZ unsafe_extra_ conditionextrarrrrrfs rf)rnrrrqrcCsbt|}|jrd|jdnd|r.d|dnd|r>d|ndf}tddd|D|_|S)N()z extra ==  and css|]}|r|VqdS)Nr).0xrrr z!_include_extra..)r Zmarkerr r)rnrrrqrspartsrrrrmsrmc CsV||}||kr8tjdd|d|d|dddn|||<|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])rBrosafeZunsafeZpreviousrrrrls  rl)(__doc__rLrOrZemailrZ email.messagerZtempfilertypingrrZdistutils.utilrrGr r Zextern.packaging.markersr Zextern.packaging.requirementsr Zextern.packaging.versionr warningsrrrcr!r'r(r*r,rCrFr\rNrfrmrlrrrrs4        )E