R" fk(dZddlZddlmZmZmZmZmZmZddl m Z m Z GddZ Gdd e Z Gd d e ZGd d e Zee efZeeeefZeZeeZGddeZdedefdZde defdZde deeeeeffdZde dededefdZde deefdZde deefdZde defdZde defdZdedefdZde defdZ de defdZ!de defd Z"de defd!Z#de defd"Z$d#ede fd$Z%d%edefd&Z&de defd'Z'y)(zHandwritten parser of dependency specifiers. The docstring for each __parse_* function contains ENBF-inspired grammar representing the implementation. N)AnyList NamedTupleOptionalTupleUnion) DEFAULT_RULES Tokenizerc@eZdZdeddfdZdefdZdefdZdefdZy)NodevaluereturnNc||_yNr)selfrs 3/usr/lib/python3/dist-packages/packaging/_parser.py__init__z Node.__init__s  c|jSrrrs r__str__z Node.__str__s zzrc<d|jjd|dS)N) __class____name__rs r__repr__z Node.__repr__s"4>>**+2dV377rctr)NotImplementedErrorrs r serializezNode.serializes!!r)r __module__ __qualname__strrrrr!rrr r s9cd8#8"3"rr ceZdZdefdZy)Variablerct|Srr$rs rr!zVariable.serialize 4yrNrr"r#r$r!r%rrr'r'3rr'ceZdZdefdZy)Valuercd|dS)N"r%rs rr!zValue.serialize!s4&{rNr+r%rrr.r. s3rr.ceZdZdefdZy)Oprct|Srr)rs rr!z Op.serialize&r*rNr+r%rrr2r2%r,rr2cLeZdZUeed<eed<eeed<eed<eeed<y)ParsedRequirementnameurlextras specifiermarkerN)rr"r#r$__annotations__rr MarkerListr%rrr5r54s& I H IN Z  rr5sourcerc6tt|tSN)rules)_parse_requirementr r r=s rparse_requirementrC? imD EEr tokenizerc|jd|jdd}|j}|jdt|}|jdt |\}}}|jddt |||||S)zI requirement = WS? IDENTIFIER WS? extras WS? requirement_details WS IDENTIFIERz1package name at the start of dependency specifierexpectedENDzend of dependency specifier)consumeexpecttext _parse_extras_parse_requirement_detailsr5)rE name_tokenr6r8r7r9r:s rrArACsd!!R"J ??D d 9 %F d7 BCF U%BC T3 6 BBrcd}d}d}|jdr|j|jd|j}|j ddj }|jdd r|||fS|j dd |jdd r|||fSt ||d }nR|j}t|}|jd|jdd r|||fSt |||rdnd }|||fS)z~ requirement_details = AT URL (WS requirement_marker?)? | specifier WS? (requirement_marker)? NATrGURLz URL after @rIrKTpeekzwhitespace after URLzURL and whitespace) span_startafterversion specifierz#name and no valid version specifier)checkreadrLpositionrMrN_parse_requirement_marker_parse_specifier)rEr9r7r: url_startspecifier_starts rrPrPXs-I C Ft$&& u}=BB ??5t? ,F+ +(>? ??5t? ,F+ +* )3G $,,$Y/ $ ??5t? ,F+ +* &$:   F ##rrXrYc|jds|jd|d||jt|}|j d|S)z3 requirement_marker = SEMICOLON marker WS? SEMICOLONz!Expected end or semicolon (after ))rXrG)r[raise_syntax_errorr\ _parse_markerrL)rErXrYr:s rr^r^s[ ??; '$$/wa 8! % NN 9 %F d Mrc|jddsgS|jddd5|jdt|}|jdddd|S#1swYSxYw) zG extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)? LEFT_BRACKETTrV RIGHT_BRACKETr8aroundrGN)r[enclosing_tokensrL_parse_extras_list)rEr8s rrOrOs{ ??>? 5  # # $  $#I.$  M  Ms .A""A,cg}|jds|S|j|jj |j d|jddr|j dn|jds |S|j|j d|j dd}|j|j) z> extras_list = identifier (wsp* ',' wsp* identifier)* rHTrGrVz"Expected comma between extra namesCOMMAzextra name after commarI)r[appendr\rNrLrerM)rEr8 extra_tokens rrmrmsF ??< (  MM).."''( $ ??V&W  k&&' rc|jddd5|jdt|}|jdddd|S#1swYSxYw)zr specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS | WS? version_many WS? LEFT_PARENTHESISRIGHT_PARENTHESISrZrjrGN)rlrL_parse_version_many)rEparsed_specifierss rr_r_si  # #" $  $/ :$    s .A  Acd}|jdr|j}||jjz }|jddr!|j d||jdz|jd dr|j d ||j|j d |jd s |S||jjz }|j d |jdr|S) z@ version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)? rS SPECIFIERVERSION_PREFIX_TRAILTrVz6.* suffix can only be used with `==` or `!=` operatorsr )rXspan_endVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrGro)r[r]r\rNrerL)rErvrXs rrurus  //+ &'' Y^^-222 ??1? =  ( (H%"++a/ )  ??6T? B  ( (R%"++ )  $w'   Y^^-222$' //+ &* rc6tt|tSr?)_parse_full_markerr r rBs r parse_markerr~rDrcBt|}|jdd|S)NrKzend of marker expressionrI)rfrM)rEretvals rr}r}s% 9 %F U%?@ Mrct|g}|jdrJ|j}t|}|j|j|f|jdrJ|S)z4 marker = marker_atom (BOOLOP marker_atom)+ BOOLOP)_parse_marker_atomr[r\extendrN)rE expressiontoken expr_rights rrfrfs`%Y/0J //( # ' 2 5::z23 //( # rc4|jd|jddrK|jddd5|jdt|}|jddddn t |}|jdS#1swYxYw) zw marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS? | WS? marker_item WS? rGrsTrVrtzmarker expressionrjN)rLr[rlrf_parse_marker_item)rEr:s rrrs d)5  ' '  &(  $   d #!.y!9F   d # $ $$I. d M $ $s .BBc|jdt|}|jdt|}|jdt|}|jd|||fS)zG marker_item = WS? marker_var WS? marker_op WS? marker_var WS? rG)rL_parse_marker_var_parse_marker_op)rEmarker_var_left marker_opmarker_var_rights rrr*sid' 2O d +I d(3 d Y(8 99rc|jdr3t|jjj ddS|jdr#t |jjS|j dy)z/ marker_var = VARIABLE | QUOTED_STRING VARIABLE._ QUOTED_STRINGz+Expected a marker variable or quoted string)messageN)r[process_env_varr\rNreplaceprocess_python_strrerEs rrr8soz"y~~/44<=, >, ~=, ===, in, not in)r[r\r2rMrNrers rrrRst$x  (@A(:;(|  ).."''((++ 8  r)(__doc__rtypingrrrrrr _tokenizerr r r r'r.r2 MarkerVar MarkerItem MarkerAtomr<r5r$rCrArPintr^rOrmr_rur~r}rfrrrrrrr%rrrs  @@0 " "t D  (E/ " 9b)+ ,  #Y ! !FcF&7FC)C0AC*0$0$ 3Xj) )*0$f),58(Y49&)S 6 c"9@FFF)  Y : ) , :) : :    y  !S!X!35   b r