o
    5‘ði)  ã                   @  sˆ  d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
 ddlmZmZ G dd„ dƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZed Ze
eef Ze	eeef Ze
eed f Zee
deef  ZG dd„ deƒZdDdd„ZdEdd„ZdFdd„ZdGd#d$„ZdHd&d'„ZdHd(d)„ZdId*d+„ZdId,d-„ZdJd.d/„Z dKd0d1„Z!dKd2d3„Z"dLd4d5„Z#dMd7d8„Z$dNd:d;„Z%dOd=d>„Z&dPd@dA„Z'dQdBdC„Z(dS )Rz˜Handwritten parser of dependency specifiers.

The docstring for each __parse_* function contains EBNF-inspired grammar representing
the implementation.
é    )ÚannotationsN)ÚListÚLiteralÚ
NamedTupleÚSequenceÚTupleÚUnioné   )ÚDEFAULT_RULESÚ	Tokenizerc                   @  s8   e Zd ZdZddd„Zddd	„Zdd
d„Zddd„ZdS )ÚNode©Úvaluer   ÚstrÚreturnÚNonec                 C  s
   || _ d S ©Nr   )Úselfr   © r   úc/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/_vendor/packaging/_parser.pyÚ__init__   s   
zNode.__init__c                 C  s   | j S r   r   ©r   r   r   r   Ú__str__   s   zNode.__str__c                 C  s   d| j j› d| j›d�S )Nú<ú(z)>)Ú	__class__Ú__name__r   r   r   r   r   Ú__repr__   s   zNode.__repr__c                 C  s   t ‚r   )ÚNotImplementedErrorr   r   r   r   Ú	serialize   s   zNode.serializeN)r   r   r   r   ©r   r   )r   Ú
__module__Ú__qualname__Ú	__slots__r   r   r   r   r   r   r   r   r      s    


r   c                   @  ó   e Zd ZdZddd„ZdS )ÚVariabler   r   r   c                 C  ó   t | ƒS r   ©r   r   r   r   r   r   "   ó   zVariable.serializeNr    ©r   r!   r"   r#   r   r   r   r   r   r%      ó    r%   c                   @  r$   )ÚValuer   r   r   c                 C  s   d| › d�S )Nú"r   r   r   r   r   r   )   s   zValue.serializeNr    r)   r   r   r   r   r+   &   r*   r+   c                   @  r$   )ÚOpr   r   r   c                 C  r&   r   r'   r   r   r   r   r   0   r(   zOp.serializeNr    r)   r   r   r   r   r-   -   r*   r-   )ÚandÚorÚ
MarkerAtomÚ
MarkerListc                   @  s6   e Zd ZU ded< ded< ded< ded< ded< d	S )
ÚParsedRequirementr   ÚnameÚurlú	list[str]ÚextrasÚ	specifierzMarkerList | NoneÚmarkerN)r   r!   r"   Ú__annotations__r   r   r   r   r2   ;   s   
 r2   Úsourcer   r   c                 C  ó   t t| td�ƒS ©N)Úrules)Ú_parse_requirementr   r
   ©r:   r   r   r   Úparse_requirementF   ó   r@   Ú	tokenizerr   c                 C  sf   |   d¡ | jddd�}|j}|   d¡ t| ƒ}|   d¡ t| ƒ\}}}| jddd� t|||||ƒS )zI
    requirement = WS? IDENTIFIER WS? extras WS? requirement_details
    ÚWSÚ
IDENTIFIERz1package name at the start of dependency specifier©ÚexpectedÚENDzend of dependency specifier)ÚconsumeÚexpectÚtextÚ_parse_extrasÚ_parse_requirement_detailsr2   )rB   Ú
name_tokenr3   r6   r4   r7   r8   r   r   r   r>   J   s   
ÿ

r>   ú"tuple[str, str, MarkerList | None]c                 C  sÜ   d}d}d}|   d¡rF|  ¡  |  d¡ | j}| jddd�j}| j dd	d
�r+|||fS | jddd� | j dd	d
�r>|||fS t| |dd�}n#| j}t| ƒ}|  d¡ | j dd	d
�r^|||fS t| ||redndd�}|||fS )z~
    requirement_details = AT URL (WS requirement_marker?)?
                        | specifier WS? (requirement_marker)?
    Ú NÚATrC   ÚURLzURL after @rE   rG   T©Úpeekzwhitespace after URLz$semicolon (after URL and whitespace))Ú
span_startrF   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))ÚcheckÚreadrH   ÚpositionrI   rJ   Ú_parse_requirement_markerÚ_parse_specifier)rB   r7   r4   r8   Ú	url_startÚspecifier_startr   r   r   rL   _   s>   



ý

ÿú

rL   rT   ÚintrF   c                C  s@   |   d¡s| jd|› d�|dd� |  ¡  t| ƒ}|  d¡ |S )z3
    requirement_marker = SEMICOLON marker WS?
    Ú	SEMICOLONz	Expected z or endN©rT   Úspan_endrC   )rU   Úraise_syntax_errorrV   Ú_parse_markerrH   )rB   rT   rF   r8   r   r   r   rX   ”   s   

ý
rX   r5   c                 C  sd   | j ddd�s	g S | jdddd�� |  d¡ t| ƒ}|  d¡ W d  ƒ |S 1 s+w   Y  |S )	zG
    extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
    ÚLEFT_BRACKETTrR   ÚRIGHT_BRACKETr6   ©ÚaroundrC   N)rU   Úenclosing_tokensrH   Ú_parse_extras_list)rB   r6   r   r   r   rK   ©   s   ý

ù	÷	rK   c                 C  s†   g }|   d¡s	|S | |  ¡ j¡ 	 |  d¡ | j ddd�r$|  d¡ n|   d¡s,	 |S |  ¡  |  d¡ | jddd�}| |j¡ q)	z>
    extras_list = identifier (wsp* ',' wsp* identifier)*
    rD   TrC   rR   z"Expected comma between extra namesÚCOMMAzextra name after commarE   )rU   ÚappendrV   rJ   rH   r`   rI   )rB   r6   Úextra_tokenr   r   r   rg   ¼   s    


ú
õrg   c                 C  sR   | j dddd�� |  d¡ t| ƒ}|  d¡ W d  ƒ |S 1 s"w   Y  |S )zr
    specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
              | WS? version_many WS?
    ÚLEFT_PARENTHESISÚRIGHT_PARENTHESISzversion specifierrd   rC   N)rf   rH   Ú_parse_version_many)rB   Úparsed_specifiersr   r   r   rY   ×   s   ý

ù	÷	rY   c                 C  s¦   d}|   d¡rQ| j}||  ¡ j7 }| j ddd�r#| jd|| jd d� | j d	dd�r3| jd
|| jd� |  d¡ |   d¡s@	 |S ||  ¡ j7 }|  d¡ |   d¡s|S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    rO   Ú	SPECIFIERÚVERSION_PREFIX_TRAILTrR   z6.* suffix can only be used with `==` or `!=` operatorsr	   r^   ÚVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrC   rh   )rU   rW   rV   rJ   r`   rH   )rB   rn   rT   r   r   r   rm   è   s0   
ýý

ý

írm   c                 C  r;   r<   )Ú_parse_full_markerr   r
   r?   r   r   r   Úparse_marker  rA   rs   c                 C  s   t | ƒ}| jddd� |S )NrG   zend of marker expressionrE   )ra   rI   )rB   Úretvalr   r   r   rr     s   rr   c                 C  sB   t | ƒg}|  d¡r|  ¡ }t | ƒ}| |j|f¡ |  d¡s
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    ÚBOOLOP)Ú_parse_marker_atomrU   rV   ÚextendrJ   )rB   Ú
expressionÚtokenÚ
expr_rightr   r   r   ra     s   


ýra   c                 C  s|   |   d¡ | jddd�r3| jdddd�� |   d¡ t| ƒ}|   d¡ W d  ƒ n1 s-w   Y  nt| ƒ}|   d¡ |S )	zw
    marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
                | WS? marker_item WS?
    rC   rk   TrR   rl   zmarker expressionrd   N)rH   rU   rf   ra   Ú_parse_marker_item)rB   r8   r   r   r   rv     s   
ý
ù€	
rv   Ú
MarkerItemc                 C  sJ   |   d¡ t| ƒ}|   d¡ t| ƒ}|   d¡ t| ƒ}|   d¡ |||fS )zG
    marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
    rC   )rH   Ú_parse_marker_varÚ_parse_marker_op)rB   Úmarker_var_leftÚ	marker_opÚmarker_var_rightr   r   r   r{   4  s   




r{   Ú	MarkerVarc                 C  sH   |   d¡rt|  ¡ j dd¡ƒS |   d¡rt|  ¡ jƒS | jdd� dS )z/
    marker_var = VARIABLE | QUOTED_STRING
    ÚVARIABLEÚ.Ú_ÚQUOTED_STRINGz+Expected a marker variable or quoted string)ÚmessageN)rU   Úprocess_env_varrV   rJ   ÚreplaceÚprocess_python_strr`   ©rB   r   r   r   r}   B  s   


ÿr}   Úenv_varc                 C  s   | dv rt dƒS t | ƒS )N)Úplatform_python_implementationÚpython_implementationr�   )r%   )rŒ   r   r   r   rˆ   P  s   rˆ   Ú
python_strc                 C  s   t  | ¡}tt|ƒƒS r   )ÚastÚliteral_evalr+   r   )r�   r   r   r   r   rŠ   W  s   
rŠ   c                 C  sr   |   d¡r|  ¡  tdƒS |   d¡r(|  ¡  | jddd� | jddd� tdƒS |   d	¡r4t|  ¡ jƒS |  d
¡S )z&
    marker_op = IN | NOT IN | OP
    ÚINÚinÚNOTrC   zwhitespace after 'not'rE   z'in' after 'not'znot inÚOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rU   rV   r-   rI   rJ   r`   r‹   r   r   r   r~   \  s   


ÿr~   )r:   r   r   r2   )rB   r   r   r2   )rB   r   r   rN   )rB   r   rT   r\   rF   r   r   r1   )rB   r   r   r5   )rB   r   r   r   )r:   r   r   r1   )rB   r   r   r1   )rB   r   r   r0   )rB   r   r   r|   )rB   r   r   r‚   )rŒ   r   r   r%   )r�   r   r   r+   )rB   r   r   r-   ))Ú__doc__Ú
__future__r   r�   Útypingr   r   r   r   r   r   Ú
_tokenizerr
   r   r   r%   r+   r-   ÚMarkerLogicalr‚   r|   r0   r1   r2   r@   r>   rL   rX   rK   rg   rY   rm   rs   rr   ra   rv   r{   r}   rˆ   rŠ   r~   r   r   r   r   Ú<module>   s@     



5




 






