o knh'@sxdZddlmZddlZddlmZmZmZmZddl m Z m Z GdddZ Gd d d e Z Gd d d e ZGd dde Zee efZeeeefZeeedfZeedeefZGdddeZdCddZdDddZdEddZdFd"d#ZdGd%d&ZdGd'd(ZdHd)d*ZdHd+d,ZdId-d.ZdJd/d0ZdJd1d2Z dKd3d4Z!dLd6d7Z"dMd9d:Z#dNd) __class____name__rrrr__repr__sz Node.__repr__cCstr)NotImplementedErrorrrrr serializeszNode.serializeN)r r r rr r )r __module__ __qualname__rrrrrrrrr s    r c@eZdZdddZdS)Variabler r cCt|Srr rrrrrzVariable.serializeNrrrrrrrrrr!r!c@r )Valuer r cCs d|dS)N"rrrrrr#s zValue.serializeNrr%rrrrr'"r&r'c@r )Opr r cCr"rr#rrrrr(r$z Op.serializeNrr%rrrrr)'r&r) MarkerAtom MarkerListc@s6eZdZUded<ded<ded<ded<ded<d S) ParsedRequirementr nameurl list[str]extras specifierzMarkerList | NonemarkerN)rrr__annotations__rrrrr,2s  r,sourcer r cCtt|tdSN)rules)_parse_requirementr rr4rrrparse_requirement=r: tokenizerr cCsf|d|jddd}|j}|dt|}|dt|\}}}|jdddt|||||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_detailsr,)r< name_tokenr-r0r.r1r2rrrr8As   r8"tuple[str, str, MarkerList | None]cCsd}d}d}|drF||d|j}|jdddj}|jdd d r+|||fS|jdd d|jdd d r>|||fSt||d d }n#|j}t|}|d|jdd d r^|||fSt|||redndd }|||fS)z~ requirement_details = AT URL (WS requirement_marker?)? | specifier WS? (requirement_marker)? NATr=URLz URL after @r?rATpeekzwhitespace after URLzURL and whitespace) span_startafterversion specifierz#name and no valid version specifier)checkreadrBpositionrCrD_parse_requirement_marker_parse_specifier)r<r1r.r2 url_startspecifier_startrrrrFVs:       rFrNintrOcCs>|ds|jd|d|d|t|}|d|S)z3 requirement_marker = SEMICOLON marker WS? SEMICOLONz!Expected end or semicolon (after ))rNr=)rQraise_syntax_errorrR _parse_markerrB)r<rNrOr2rrrrTs   rTr/cCsd|jddds gS|jdddd|dt|}|dWd|S1s+wY|S) zG extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)? LEFT_BRACKETTrL RIGHT_BRACKETr0aroundr=N)rQenclosing_tokensrB_parse_extras_list)r<r0rrrrEs     rEcCsg}|ds |S||j |d|jdddr$|dn|ds, |S||d|jddd}||jq) z> extras_list = identifier (wsp* ',' wsp* identifier)* r>Tr=rLz"Expected comma between extra namesCOMMAzextra name after commar?)rQappendrRrDrBr[rC)r<r0 extra_tokenrrrrbs       rbcCsR|jdddd|dt|}|dWd|S1s"wY|S)zr specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS | WS? version_many WS? LEFT_PARENTHESISRIGHT_PARENTHESISrPr_r=N)rarB_parse_version_many)r<parsed_specifiersrrrrUs     rUcCsd}|drQ|j}||j7}|jdddr#|jd||jdd|jd ddr3|jd ||jd|d |d s@ |S||j7}|d |ds|S) z@ version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)? rI SPECIFIERVERSION_PREFIX_TRAILTrLz6.* suffix can only be used with `==` or `!=` operatorsr)rNspan_endVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr=rc)rQrSrRrDr[rB)r<rirNrrrrhs0     rhcCr5r6)_parse_full_markerr rr9rrr parse_markerr;rocCst|}|jddd|S)NrAzend of marker expressionr?)r\rC)r<retvalrrrrnsrncCsBt|g}|dr|}t|}||j|f|ds |S)z4 marker = marker_atom (BOOLOP marker_atom)+ BOOLOP)_parse_marker_atomrQrRextendrD)r< expressiontoken expr_rightrrrr\s   r\cCs||d|jdddr3|jdddd|dt|}|dWdn1s-wYnt|}|d|S) zw marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS? | WS? marker_item WS? r=rfTrLrgzmarker expressionr_N)rBrQrar\_parse_marker_item)r<r2rrrrrs    rr MarkerItemcCsJ|dt|}|dt|}|dt|}|d|||fS)zG marker_item = WS? marker_var WS? marker_op WS? marker_var WS? r=)rB_parse_marker_var_parse_marker_op)r<marker_var_left marker_opmarker_var_rightrrrrw(s     rw MarkerVarcCsH|drt|jddS|drt|jS|jdddS)z/ marker_var = VARIABLE | QUOTED_STRING VARIABLE._ QUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rQprocess_env_varrRrDreplaceprocess_python_strr[r<rrrry6s   ryenv_varcCs|dvrtdSt|S)N)platform_python_implementationpython_implementationr)r!)rrrrrDsr python_strcCst|}tt|Sr)ast literal_evalr'r )rr rrrrKs  rcCsr|dr |tdS|dr(||jddd|jdddtdS|d r4t|jS|d S) z& marker_op = IN | NOT IN | OP INinNOTr=zwhitespace after 'not'r?z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rQrRr)rCrDr[rrrrrzPs   rz)r4r r r,)r<r r r,)r<r r rH)r<r rNrXrOr r r+)r<r r r/)r<r r r )r4r r r+)r<r r r+)r<r r r*)r<r r rx)r<r r r~)rr r r!)rr r r')r<r r r))'__doc__ __future__rrtypingrrrr _tokenizerrr r r!r'r)r~rxr*r r+r,r:r8rFrTrErbrUrhrornr\rrrwryrrrzrrrrs>     3