a if'@sdZddlmZddlZddlmZmZmZmZddl m Z m Z GdddZ Gd d d e Z Gd d d e ZGd dde Zee efZeeeefZeeedfZeedeefZGdddeZdddddZdddddZdddddZdddddd d!Zdd"dd#d$Zdd"dd%d&Zdddd'd(Zdddd)d*Zdddd+d,Zdddd-d.Zdddd/d0Z dddd1d2Z!dd3dd4d5Z"dd6dd7d8Z#dd d9d:d;Z$dd d<d=d>Z%dddd?d@Z&dS)AzHandwritten parser of dependency specifiers. The docstring for each __parse_* function contains EBNF-inspired grammar representing the implementation. ) annotationsN) NamedTupleSequenceTupleUnion) DEFAULT_RULES Tokenizerc@sFeZdZdddddZddddZddd d Zddd d Zd S)NodestrNone)valuereturncCs ||_dSNr )selfr ru/sparta/input/_build_configuration/image_build+validate/lib/bmcenv/lib64/python3.9/site-packages/packaging/_parser.py__init__sz Node.__init__rcCs|jSrrrrrr__str__sz Node.__str__cCsd|jjd|dS)N) __class____name__rrrr__repr__sz Node.__repr__cCstdSr)NotImplementedErrorrrrr serializeszNode.serializeN)r __module__ __qualname__rrrrrrrrr sr c@seZdZddddZdS)Variabler rcCst|Srr rrrrrszVariable.serializeNrrrrrrrrr sr c@seZdZddddZdS)Valuer rcCs d|dS)N"rrrrrr#szValue.serializeNr"rrrrr#"sr#c@seZdZddddZdS)Opr rcCst|Srr!rrrrr(sz Op.serializeNr"rrrrr%'sr% MarkerAtom MarkerListc@s6eZdZUded<ded<ded<ded<ded<d S) ParsedRequirementr nameurl list[str]extras specifierzMarkerList | NonemarkerN)rrr__annotations__rrrrr(2s r(r )sourcercCstt|tdSN)rules)_parse_requirementr rr0rrrparse_requirement=sr5r ) tokenizerrcCsf|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()r6 name_tokenr)r,r*r-r.rrrr3As   r3z"tuple[str, str, MarkerList | None]cCsd}d}d}|dr||d|j}|jdddj}|jdd d rV|||fS|jdd d|jdd d r||||fSt||d d }nF|j}t|}|d|jdd d r|||fSt|||rdndd }|||fS)z~ requirement_details = AT URL (WS requirement_marker?)? | specifier WS? (requirement_marker)? NATr7URLz URL after @r9r;Tpeekzwhitespace after URLzURL and whitespace) span_startafterversion specifierz#name and no valid version specifier)checkreadr<positionr=r>_parse_requirement_marker_parse_specifier)r6r-r*r. url_startspecifier_startrrrr@Vs:       r@int)r6rGrHrcCs>|ds |jd|d|d|t|}|d|S)z3 requirement_marker = SEMICOLON marker WS? SEMICOLONz!Expected end or semicolon (after ))rGr7)rJraise_syntax_errorrK _parse_markerr<)r6rGrHr.rrrrMs   rMr+cCsb|jdddsgS|jdddd,|dt|}|dWdn1sT0Y|S) zG extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)? LEFT_BRACKETTrE RIGHT_BRACKETr,aroundr7N)rJenclosing_tokensr<_parse_extras_list)r6r,rrrr?s (r?cCsg}|ds|S||j|d|jdddrF|dn |dsRq||d|jddd}||jq"|S) z> extras_list = identifier (wsp* ',' wsp* identifier)* r8r7TrEz"Expected comma between extra namesCOMMAzextra name after commar9)rJappendrKr>r<rTr=)r6r, extra_tokenrrrr[s     r[cCsP|jdddd,|dt|}|dWdn1sB0Y|S)zr specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS | WS? version_many WS? LEFT_PARENTHESISRIGHT_PARENTHESISrIrXr7N)rZr<_parse_version_many)r6parsed_specifiersrrrrNs (rNcCsd}|dr|j}||j7}|jdddrF|jd||jdd|jd ddrf|jd ||jd|d |d s|q||j7}|d q|S) z@ version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)? rB SPECIFIERVERSION_PREFIX_TRAILTrEz6.* suffix can only be used with `==` or `!=` operatorsr)rGspan_endVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr7r\)rJrLrKr>rTr<)r6rbrGrrrras,    racCstt|tdSr1)_parse_full_markerr rr4rrr parse_markersrhcCst|}|jddd|S)Nr;zend of marker expressionr9)rUr=)r6retvalrrrrgsrgcCs:t|g}|dr6|}t|}||j|fq |S)z4 marker = marker_atom (BOOLOP marker_atom)+ BOOLOP)_parse_marker_atomrJrKextendr>)r6 expressiontoken expr_rightrrrrUs   rUcCs||d|jdddrf|jdddd,|dt|}|dWdqn1sZ0Ynt|}|d|S) zw marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS? | WS? marker_item WS? r7r_TrEr`zmarker expressionrXN)r<rJrZrU_parse_marker_item)r6r.rrrrks  * rk MarkerItemcCsJ|dt|}|dt|}|dt|}|d|||fS)zG marker_item = WS? marker_var WS? marker_op WS? marker_var WS? r7)r<_parse_marker_var_parse_marker_op)r6marker_var_left marker_opmarker_var_rightrrrrp(s    rp MarkerVarcCsH|dr t|jddS|dr8t|jS|jdddS)z/ marker_var = VARIABLE | QUOTED_STRING VARIABLE._ QUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rJprocess_env_varrKr>replaceprocess_python_strrTr6rrrrr6s  rr)env_varrcCs|dvrtdSt|SdS)N)platform_python_implementationpython_implementationr)r )rrrrr}Dsr}) python_strrcCst|}tt|Sr)ast literal_evalr#r )rr rrrrKs rcCsv|dr|tdS|drP||jddd|jdddtdS|d rht|jS|d Sd S) z& marker_op = IN | NOT IN | OP INinNOTr7zwhitespace after 'not'r9z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not inN)rJrKr%r=r>rTrrrrrsPs   rs)'__doc__ __future__rrtypingrrrr _tokenizerrr r r r#r%rwrqr&r r'r(r5r3r@rMr?r[rNrarhrgrUrkrprrr}rrsrrrrs<   3