a „oeÒ'ã@sÎdZddlZddlmZmZmZmZmZmZddl m Z m Z Gdd„dƒZ Gdd „d e ƒZ Gd d „d e ƒZGd d „d e ƒZee efZeeeefZeZeeZGdd„deƒZeedœdd„Ze edœdd„Ze eeeeefdœdd„Ze eeedœdd„Ze eedœdd„Ze eedœdd„Ze edœdd „Ze edœd!d"„Zeedœd#d$„Ze edœd%d&„Z e edœd'd(„Z!e edœd)d*„Z"e edœd+d,„Z#ee d-œd.d/„Z$eed0œd1d2„Z%e edœd3d4„Z&dS)5z˜Handwritten parser of dependency specifiers. The docstring for each __parse_* function contains ENBF-inspired grammar representing the implementation. éN)ÚAnyÚListÚ NamedTupleÚOptionalÚTupleÚUnioné)Ú DEFAULT_RULESÚ Tokenizerc@sFeZdZeddœdd„Zedœdd„Zedœdd „Zedœd d „ZdS) ÚNodeN)ÚvalueÚreturncCs ||_dS©N©r )Úselfr ©rúHC:\Program Files\Certbot\pkgs\pkg_resources\_vendor\packaging\_parser.pyÚ__init__sz Node.__init__©r cCs|jSrr©rrrrÚ__str__sz Node.__str__cCsd|jj›d|›d�S)Nú)Ú __class__Ú__name__rrrrÚ__repr__sz Node.__repr__cCst‚dSr)ÚNotImplementedErrorrrrrÚ serializeszNode.serialize)rÚ __module__Ú __qualname__Ústrrrrrrrrrr sr c@seZdZedœdd„ZdS)ÚVariablercCst|ƒSr©rrrrrrszVariable.serializeN©rrrrrrrrrr sr c@seZdZedœdd„ZdS)ÚValuercCs d|›d�S)Nú"rrrrrr!szValue.serializeNr"rrrrr# sr#c@seZdZedœdd„ZdS)ÚOprcCst|ƒSrr!rrrrr&sz Op.serializeNr"rrrrr%%sr%c@s>eZdZUeed<eed<eeed<eed<eeed<dS)ÚParsedRequirementÚnameÚurlÚextrasÚ specifierÚmarkerN)rrrrÚ__annotations__rrÚ MarkerListrrrrr&4s  r&)Úsourcer cCstt|td�ƒS©N)Zrules)Ú_parse_requirementr r ©r.rrrÚparse_requirement?sr2)Ú tokenizerr cCsf| d¡|jddd�}|j}| d¡t|ƒ}| d¡t|ƒ\}}}|jddd�t|||||ƒS)zI requirement = WS? IDENTIFIER WS? extras WS? requirement_details ÚWSÚ IDENTIFIERz1package name at the start of dependency specifier©ZexpectedÚENDzend of dependency specifier)ÚconsumeÚexpectÚtextÚ _parse_extrasÚ_parse_requirement_detailsr&)r3Z name_tokenr'r)r(r*r+rrrr0Cs ÿ  r0cCsÜd}d}d}| d¡rŒ| ¡| d¡|j}|jddd�j}|jdd d �rV|||fS|jdd d�|jdd d �r||||fSt||d d �}nF|j}t|ƒ}| d¡|jdd d �r¼|||fSt|||rÊdndd �}|||fS)z~ requirement_details = AT URL (WS requirement_marker?)? | specifier WS? (requirement_marker)? ÚNÚATr4ZURLz URL after @r6r7T©Úpeekzwhitespace after URLzURL and whitespace)Ú span_startÚafterúversion specifierz#name and no valid version specifier)ÚcheckÚreadr8Úpositionr9r:Ú_parse_requirement_markerÚ_parse_specifier)r3r*r(r+Z url_startZspecifier_startrrrr<Xs:    ÿ  ÿú r<)r3rArBr cCs>| d¡s |jd|›d�|d�| ¡t|ƒ}| d¡|S)z3 requirement_marker = SEMICOLON marker WS? Z SEMICOLONz!Expected end or semicolon (after ú))rAr4)rDÚraise_syntax_errorrEÚ _parse_markerr8)r3rArBr+rrrrG‹s  þ rGcCsb|jddd�sgS|jdddd��,| d¡t|ƒ}| d¡Wdƒn1sT0Y|S) zG extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)? Z LEFT_BRACKETTr?Z RIGHT_BRACKETr)©Zaroundr4N)rDÚenclosing_tokensr8Ú_parse_extras_list)r3r)rrrr;Ÿsý (r;cCs„g}| d¡s|S| | ¡j¡| d¡|jddd�rF| d¡n | d¡sRq€| ¡| d¡|jddd�}| |j¡q"|S) z> extras_list = identifier (wsp* ',' wsp* identifier)* r5r4Tr?z"Expected comma between extra namesÚCOMMAzextra name after commar6)rDÚappendrEr:r8rJr9)r3r)Z extra_tokenrrrrN²s     rNcCsP|jdddd��,| d¡t|ƒ}| d¡Wdƒn1sB0Y|S)zr specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS | WS? version_many WS? ÚLEFT_PARENTHESISÚRIGHT_PARENTHESISrCrLr4N)rMr8Ú_parse_version_many)r3Úparsed_specifiersrrrrHÍsý (rHcCsšd}| d¡r–|j}|| ¡j7}|jddd�rF|jd||jdd�|jd dd�rf|jd ||jd�| d ¡| d ¡s|q–|| ¡j7}| d ¡q|S) z@ version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)? r=Z SPECIFIERZVERSION_PREFIX_TRAILTr?z6.* suffix can only be used with `==` or `!=` operatorsr)rAZspan_endZVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr4rO)rDrFrEr:rJr8)r3rTrArrrrSÞs, ýý   rScCstt|td�ƒSr/)rKr r r1rrrÚ parse_markerþsrUcCs:t|ƒg}| d¡r6| ¡}t|ƒ}| |j|f¡q |S)z4 marker = marker_atom (BOOLOP marker_atom)+ ZBOOLOP)Ú_parse_marker_atomrDrEÚextendr:)r3Z expressionÚtokenZ expr_rightrrrrKs   rKcCs|| d¡|jddd�rf|jdddd��,| d¡t|ƒ}| d¡Wdƒqn1sZ0Ynt|ƒ}| d¡|S) zw marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS? | WS? marker_item WS? r4rQTr?rRzmarker expressionrLN)r8rDrMrKÚ_parse_marker_item)r3r+rrrrVs ý * rVcCsJ| d¡t|ƒ}| d¡t|ƒ}| d¡t|ƒ}| d¡|||fS)zG marker_item = WS? marker_var WS? marker_op WS? marker_var WS? r4)r8Ú_parse_marker_varÚ_parse_marker_op)r3Zmarker_var_leftZ marker_opZmarker_var_rightrrrrY$s    rYcCsH| d¡r t| ¡j dd¡ƒS| d¡r8t| ¡jƒS|jdd�dS)z/ marker_var = VARIABLE | QUOTED_STRING ZVARIABLEÚ.Ú_Z QUOTED_STRINGz+Expected a marker variable or quoted string)ÚmessageN)rDÚprocess_env_varrEr:ÚreplaceÚprocess_python_strrJ©r3rrrrZ2s  ÿrZ)Úenv_varr cCs$|dks|dkrtdƒSt|ƒSdS)NZplatform_python_implementationZpython_implementation)r )rcrrrr_@s ÿþr_)Ú python_strr cCst |¡}tt|ƒƒSr)ÚastZ literal_evalr#r)rdr rrrraJs racCsv| d¡r| ¡tdƒS| d¡rP| ¡|jddd�|jddd�tdƒS| d ¡rht| ¡jƒS| d ¡Sd S) z& marker_op = IN | NOT IN | OP ÚINÚinZNOTr4zwhitespace after 'not'r6z'in' after 'not'znot inÚOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not inN)rDrEr%r9r:rJrbrrrr[Os   ÿr[)'Ú__doc__reÚtypingrrrrrrZ _tokenizerr r r r r#r%Z MarkerVarZ MarkerItemZ MarkerAtomr-r&rr2r0r<ÚintrGr;rNrHrSrUrKrVrYrZr_rar[rrrrÚs@   þ 4þ