R" f ddlZddlZddlZddlZddlZddlZddlZddlmZm Z m Z m Z m Z m Z mZmZmZmZddlmZmZmZmZej0dZej4dddk\r ddlmZmZnej:r ddlmZmZn ddlmZmZ e e Z Gdde#Z$GddedZ%hdZ&hdZ'dhZ(de)de e)fdZ*de e)de e)e)ffdZ+dejXjZdee.e)fde)fdZ/iddd d!d"d#d$d$d%d&d'd(d)d)d*d+d,d,d-d-d.d.d/d0d1d2d3d3d4d4d5d6d7d8dd9d:d;dd?d@dAdBdC Z0e0jcDcic]\}}|| c}}Z2dee.e)fdee%e e)e e)fffdDZ3e4Z5gdEZ6edEZ7e8gdFZ9GdGdHe eZ:GdIdJZ;y#e$rGd d ZGd d ZY6wxYw#e!$rGd de"Z YHwxYwcc}}w)KN) AnyCallableDictGenericListOptionalTupleTypeUnioncast) requirements specifiersutilsversionT))Literal TypedDictceZdZdZy)rcyN_args_kwargss 4/usr/lib/python3/dist-packages/packaging/metadata.py__init_subclass__zLiteral.__init_subclass__#N__name__ __module__ __qualname__r rr"rrr"r"rceZdZdZy)rcyrrrs rr zTypedDict.__init_subclass__'r!r"Nr#rr"rrr&r'r"rcReZdZUdZeed<eeed<dedeeddfdZdefdZ y)ExceptionGroupzA minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11. If :external:exc:`ExceptionGroup` is already defined by Python itself, that version is used instead. message exceptionsreturnNc ||_||_yr)r,r-)selfr,r-s r__init__zExceptionGroup.__init__9s"DL(DOr"ch|jjd|jd|jdS)N(z, )) __class__r$r,r-)r0s r__repr__zExceptionGroup.__repr__=s1nn--.a /?r$//ATTUV Vr") r$r%r&__doc__str__annotations__r Exceptionr1r6rr"rr+r+/sD  O# )C )T)_ ) ) Wc Wr"r+c>eZdZUdZeed< dededdffd ZxZS)InvalidMetadataz'A metadata field contains invalid data.fieldr,r.Nc2||_t| |yr)r=superr1)r0r=r,r5s rr1zInvalidMetadata.__init__Js  !r")r$r%r&r7r8r9r1 __classcell__)r5s@rr<r<Ds-1 J;"c"C"D""r"r<ceZdZUdZeed<eed<eed<eeed<eed<eed<eeed<eed <eed <eed <eed <eeed <eed<eeed<eeed<eeed<eeed<eed<eed<eeed<eeed<eeed<eed<eeed<eeefed<eed<eeed<eeed<y) RawMetadataaA dictionary of raw core metadata. Each field in core metadata maps to a key of this dictionary (when data is provided). The key is lower-case and underscores are used instead of dashes compared to the equivalent core metadata field. Any core metadata field that can be specified multiple times or can hold multiple values in a single field have a key with a plural name. See :class:`Metadata` whose attributes match the keys of this dictionary. Core metadata fields that can be specified multiple times are stored as a list or dict depending on which is appropriate for the field. Any fields which hold multiple values in a single field are stored as a list. metadata_versionnamer platformssummary descriptionkeywords home_pageauthor author_emaillicensesupported_platforms download_url classifiersrequiresprovides obsoletes maintainermaintainer_email requires_dist provides_distobsoletes_distrequires_pythonrequires_external project_urlsdescription_content_typeprovides_extradynamicN)r$r%r&r7r8r9rrrr"rrBrBSs   I LCy L3iN K Lc"c3i3iCyO99ICy sCx. "!I#Yr"rBF)total>rDrJrLrFrrIrSrGrKrNrXrTrCr[> r]rQrPrRrErOrVrUrWr\rYrMrZdatar.cf|jdDcgc]}|jc}Scc}w)zCSplit a string of comma-separate keyboards into a list of keywords.,)splitstrip)r_ks r_parse_keywordsres$#zz# /!AGGI // /s.c i}|D]s}|jddDcgc]}|j}}|jdgtddt |z z|\}}||vr t d|||<u|Scc}w)z?Parse a list of label/URL string pairings separated by a comma.rar rrz duplicate labels in project urls)rbrcextendmaxlenKeyError)r_urlspairppartslabelurls r_parse_project_urlsrrs D $%)JJsA$67q77 bTSAE N345 s D==> >U A D K!8sA=msgsourcect|tr|j}|S|jd} |jddS#t$r t dwxYw)zGet the body of the message.Tdecodeutf8strictzpayload in an invalid encoding) isinstancer8 get_payloadrwUnicodeDecodeError ValueError)rsrtpayloadbpayloads r _get_payloadrsb&#(///6 ???684 4! ?=> > ?s AArJz author-emailrK classifierrOrGzdescription-content-typer[z download-urlrNr]z home-pagerIrHrLrSzmaintainer-emailrTmetadata-versionrCrDrRzobsoletes-distrWplatformrErQrVr\rPrUrYrXrFrMr) z project-urlrQz provides-distzprovides-extrarPz requires-distzrequires-externalzrequires-pythonrFzsupported-platformrc i}i}t|trHtjj tj j j|}nGtjjtj j j|}t|jD]}|j}|j|xsg}g}d}|D]}t|tjjtfsJt|tjjrg} tjj!|D]-\} } | j#ddd} | j'| | f/|j'ttjj)| |j'||s|||<'t*j-|} | |||<E| t.vrt1|dk(r |d|| <e| t2vr||| <t| d k(r!t1|dk(rt5|d|| <| d k(r t7||| <|||< t;||} | rfd |vrCt=t|j?d }|jAd gjC|| gnd |vr|d j'| n| |d < t=tJ||fS#t$$rd} d}YwxYw#t8$r |||<YdwxYw#tD$rB|jAd gj'|jGt|tH YwxYw) a Parse a distribution's metadata stored as email headers (e.g. from ``METADATA``). This function returns a two-item tuple of dicts. The first dict is of recognized fields from the core metadata specification. Fields that can be parsed and translated into Python's built-in types are converted appropriately. All other fields are left as-is. Fields that are allowed to appear multiple times are stored as lists. The second dict contains all other fields from the metadata. This includes any unrecognized fields. It also includes any fields which are expected to be parsed into a built-in type but were not formatted appropriately. Finally, any fields that are expected to appear only once but are repeated are included in this dict. )policyTrxrylatin1Fr rrHrZrGrv)&rzr8emailparserParserrcompat32parsestr BytesParser parsebytes frozensetkeyslowerget_allheaderHeader decode_headerrwr|append make_header_EMAIL_TO_RAW_MAPPINGget_STRING_FIELDSrj _LIST_FIELDSrerrrkrr pop setdefaultrhr}r{bytesrB)r_rawunparsedparsedrDheadersvaluevalid_encodinghchunksbinencodingraw_namer~description_headers r parse_emailr'sO =?C%'H$$$ELL,A,A$BKKDQ))1F1F)GRRSWX &++-(t#zz| ..&,"# Aa%,,"5"5s!;< <<!U\\001=?%*\\%?%?%B 3MC* 684 $*MM3/2 3 S!9!9&!ABC QG# P"HTN (,,T2  #HTN  ~ %#e*/!!HCM %!CM  #E a+E!H5CM ' ' 3E :H #HTNit#t-vt, #%)#sww}/E%F"##M26=='1(*'..w7%,M"  S !8 ++Q./#+)./J '!& '  M2.55   ju&=  >  s7'K<L6 L%< L L L"!L"%AM0/M0)1.01.11.22.12.2z2.3)rCrDrceZdZUdZeed<eed<eed<dddeddfd Zd d deddfd Zd d d e d de fdZ ddede e defdZdedefdZdedefdZdedej&fdZdedefdZdedefdZdeedeefdZdeedeej4fdZdedej:fdZdeedeej@fdZ!y) _ValidatoravValidate a metadata field. All _process_*() methods correspond to a core metadata field. The method is called with the field's raw value. If the raw value is valid it is returned in its "enriched" form (e.g. ``version.Version`` for the ``Version`` field). If the raw value is invalid, :exc:`InvalidMetadata` is raised (with a cause as appropriate). rDraddedrrr.Nc||_yrr)r0rs rr1z_Validator.__init__s  r"_ownerMetadatac.||_t||_yr)rD_RAW_TO_EMAIL_MAPPINGr)r0rrDs r __set_name__z_Validator.__set_name__s -d3 r"instancecz|j}|jj|j}|jtvs|" t |d|j}||}|||j< |j|j=tt|S#t $rYBwxYw#t$rY*wxYw)N _process_) __dict___rawrrD_REQUIRED_ATTRSgetattrAttributeErrorrkr r)r0rrcacher converters r__get__z_Validator.__get__s!! !!$)), 99 '5+< )07 $))>U0V "%( dii  dii(Au~"     s$B8B. B+*B+. B:9B:rscausec t|j|jdt|ji}||_|S)Nr=)r<r format_maprepr __cause__)r0rsrexcs r_invalid_metadataz_Validator._invalid_metadatas< MM3>>7D4G*HI   r"rcZ|tvr|j|dtt|S)Nz is not a valid metadata version)_VALID_METADATA_VERSIONSrr _MetadataVersionr0rs r_process_metadata_versionz$_Validator._process_metadata_versions2 0 0((E94T)UV V$e,,r"c|s|jd tj|d|S#tj$r}|j|d|d}~wwxYw)N{field} is a required fieldTvalidate is invalid for {field}r)rrcanonicalize_name InvalidNamer0rrs r _process_namez_Validator._process_name$sp(()FG G   # #ED 9 L    (()45S)  s.AAAc|s|jd tj|S#tj$r}|j|d|d}~wwxYw)Nrrr)rversion_moduleparseInvalidVersionrs r_process_versionz_Validator._process_version1sh(()FG G !''. .,, (()45S)  s*AAAc0d|vr|jd|S)z%Check the field contains no newlines. z{field} must be a single line)rrs r_process_summaryz_Validator._process_summary;s 5=(()HI I r"chd}tjj}||d<|jj |dj }}||vs||j vr |j dt|d||jdd}|dk7r|j dt|dd h}|jd d}|d k(r$||vr |j d t|d||S) N> text/plain text/x-rst text/markdownz content-typez{field} must be one of z, not charsetzUTF-8z0{field} can only specify the UTF-8 charset, not GFM CommonMarkvariantrz(valid Markdown variants for {field} are ) rr, EmailMessageget_content_typerparamsrlistr) r0r content_typesr, content_type parametersrmarkdown_variantsrs r!_process_description_content_typez,_Validator._process_description_content_typeAs/E --,,."'  $ $ & , , . N # * *!  } , EKKM0Q((+D,?+@uiP ..G4 g ((DT']OT #L1..E2 ? *w>O/O((rDrrz" is not allowed as a dynamic fieldz is not a valid dynamic field)mapr8rrrr)r0r dynamic_fields r_process_dynamicz_Validator._process_dynamicas E2 XM GG,,iAB&;;,,y8U-VWW  XC 5)**r"cg} |D](}|jtj|d* |S#tj$r}|j d|d}~wwxYw)NTrrr)rrrrr)r0rnormalized_namesrDrs r_process_provides_extraz"_Validator._process_provides_extraks $ V ''(?(?t(TU V$ #    (((34C)  s-4A"AA"c tj|S#tj$r}|j|d|d}~wwxYwNrr)r SpecifierSetInvalidSpecifierrrs r_process_requires_pythonz#_Validator._process_requires_pythonzsS **51 1** (()45S)  sAAAcg} |D]&}|jtj|( |S#tj$r}|j d|d}~wwxYwr)rr RequirementInvalidRequirementr)r0rreqsreqrs r_process_requires_distz!_Validator._process_requires_distst  ; L44S9: ; K.. Y((C72K)LTW(X X Ys+2A AA r)"r$r%r&r7r8r9rr1rr rrrr:r<rrrrVersionrrrrrrNormalizedNamerrrrrrrrr"rrrs~ IM  #(   4:4S4T4 D4D86:' 2 -s-7G- 3 3 cn.D.Dcc ss@+d3i+DI+ $Cy $ e"" # $cj6M6M Cy  l&& ' r"rcneZdZUdZeed<edddededdfdZeddde e e fdeddfd Z e Ze eed < e Ze e ed < e Ze ej&ed < e d Ze eee ed< e Ze eee ed< e dZe eee ed< e Ze ee ed< e Ze ee ed< e dZe ee ed< e Ze eee ed< e Ze ee ed< e dZe ee ed< e Ze ee ed< e Z e ee ed< e dZ!e ee ed< e dZ"e ee ed< e Z#e ee ed< e dZ$e eee ed < e dZ%e eee&jNed!< e dZ(e ee)jTed"< e dZ+e eee ed#< e dZ,e ee-e e fed$< e dZ.e eee/j`ed%< e dZ1e eee ed&< e dZ2e eee ed'< e dZ3e eee ed(< e dZ4e eee ed)< e dZ5e eee ed*<y+),raJRepresentation of distribution metadata. Compared to :class:`RawMetadata`, this class provides objects representing metadata fields instead of only using built-in types. Any invalid metadata will cause :exc:`InvalidMetadata` to be raised (with a :py:attr:`~BaseException.__cause__` attribute as appropriate). rTrr_rr.c|}|j|_|rg} |j}tj |}t|jtz}|dhz}|D]l} |r[ |j| j} tj | } | kDr't| } t | d} |j | at|| n|r td||S#t $r}|j |d}Yd}~d}~wwxYw#t$r#t | d| } |j | YwxYw#t $r} |j | Yd} ~ d} ~ wwxYw)zCreate an instance from :class:`RawMetadata`. If *validate* is true, all metadata will be validated. All exceptions related to validation will be gathered and raised as an :class:`ExceptionGroup`. NrCunrecognized field: zW{field} introduced in metadata version {field_metadata_version}, not {metadata_version}zinvalid metadata)copyrrCrindexr<rrrrrrkrrr+)clsr_rinsr-rC metadata_agemetadata_version_excfields_to_checkkeyfield_metadata_versionr field_ager=s rfrom_rawzMetadata.from_rawse99; *,J (##7 7==>NO (1OCO  23 3O& ++'%58\\#5F5L5L2 %=$B$B2% %|3$9#$>E"1 %!S#C '--c2$C%/ +6$%7DD Q# (!!"67#'  (" (%"1#9McW7U"VC&--c2$%"'+%%c**+sZ!C&+D>.DAD> D>& D /DD )D;8D>:D;;D>> E"EE"c$t|\}}|rEg}|D]0}|tvr|d}nd|}|jt||2|r t d| |j ||S#t$r}t d|j dd}~wwxYw)zParse metadata from email headers. If *validate* is true, the metadata will be validated. All exceptions related to validation will be gathered and raised as an :class:`ExceptionGroup`. z has invalid datar rrzinvalid or unparsed metadataN)rrrr<r+rr-) r r_rrrr- unparsed_keyr, exc_groups r from_emailzMetadata.from_emails$D) X *,J ( J #88!- 00ABG 4\4DEG!!/,"HI  J$Z<< <<h<7 7  . 0D0D  sA** B3B  BrCrDrrrr]rErrMrFrGrr[rHrIrNrJrKrrSrTrLrOrUrXrYrZr\rVrWrPrQrRN)6r$r%r&r7rBr9 classmethodboolrr rr8rrrCrrDrrrr]rrrErMrFrGr[rHrIrNrJrKrSrTrLrOrUrrrXrrrYrZrr\rrrVrWrPrQrRrr"rrrs =A6K6d6j66p:>$37 :6@\j!12A<&LD*S/(3=,GZ.. />:/90GZc+ ,D1;Iz(49-.=0;EE;RHT#Y$78R:)3GZ &5R-7\KHSM*93:D5:Qj#7QL0: Hj$s),-<0+5r.s    IHFNN3BQ6!)) 88  <$*$N"j"=)5=H"   0#0$s)0 %d3i%DcN%P?emm++?U5#:5F?3?: hN-=   :  N y y,** F &!" #$"$&$,(/9<7L6Q6Q6ST seTm,eE3J'm,E+tCcN?S2S,Tm,`X FCDCDll^i%i%a       WWWWnUs*F& G G&GGGG