o
    üÞhí'  ã                   @  sx  d Z ddlmZ ddlZddl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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dCdd„ZdDdd„ZdEdd„ZdFd"d#„ZdGd%d&„ZdGd'd(„ZdHd)d*„ZdHd+d,„ZdId-d.„ZdJd/d0„ZdJd1d2„Z dKd3d4„Z!dLd6d7„Z"dMd9d:„Z#dNd<d=„Z$dOd?d@„Z%dPdAdB„Z&dS )Qz˜Handwritten parser of dependency specifiers.

The docstring for each __parse_* function contains EBNF-inspired grammar representing
the implementation.
é    )ÚannotationsN)Ú
NamedTupleÚSequenceÚTupleÚUnioné   )ÚDEFAULT_RULESÚ	Tokenizerc                   @  s4   e Zd Zddd„Zddd„Zdd	d
„Zddd„ZdS )ÚNodeÚvalueÚstrÚreturnÚNonec                 C  s
   || _ d S ©N©r   )Úselfr   © r   úQ/var/www/html/premium_crap/venv/lib/python3.10/site-packages/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| › d�S )Nú<z('z')>)Ú	__class__Ú__name__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__r   r   r   r   r   r   r   r   r
      s
    


r
   c                   @  ó   e Zd Zddd„ZdS )ÚVariabler   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!   c                   @  r    )ÚValuer   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   c                 C  r"   r   r#   r   r   r   r   r   (   r$   zOp.serializeNr   r%   r   r   r   r   r)   '   r&   r)   Ú
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   r,   2   s   
 r,   Úsourcer   r   c                 C  ó   t t| td�ƒS ©N)Úrules)Ú_parse_requirementr	   r   ©r4   r   r   r   Úparse_requirement=   ó   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_detailsr,   )r<   Ú
name_tokenr-   r0   r.   r1   r2   r   r   r   r8   A   s   
ÿ

r8   ú"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ÚATr=   ÚURLzURL after @r?   rA   T©Úpeekzwhitespace after URLzURL and whitespace)Ú
span_startÚafterúversion specifierz#name and no valid version specifier)ÚcheckÚreadrB   ÚpositionrC   rD   Ú_parse_requirement_markerÚ_parse_specifier)r<   r1   r.   r2   Ú	url_startÚspecifier_startr   r   r   rF   V   s:   



ÿ

ÿú

rF   rN   ÚintrO   c                C  s>   |   d¡s| jd|› d�|d� |  ¡  t| ƒ}|  d¡ |S )z3
    requirement_marker = SEMICOLON marker WS?
    Ú	SEMICOLONz!Expected end or semicolon (after ú))rN   r=   )rQ   Úraise_syntax_errorrR   Ú_parse_markerrB   )r<   rN   rO   r2   r   r   r   rT   ‰   s   

þ
rT   r/   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_BRACKETTrL   ÚRIGHT_BRACKETr0   ©Úaroundr=   N)rQ   Úenclosing_tokensrB   Ú_parse_extras_list)r<   r0   r   r   r   rE   �   s   ý

ù	÷	rE   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)*
    r>   Tr=   rL   z"Expected comma between extra namesÚCOMMAzextra name after commar?   )rQ   ÚappendrR   rD   rB   r[   rC   )r<   r0   Úextra_tokenr   r   r   rb   °   s    


ú
õrb   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_PARENTHESISrP   r_   r=   N)ra   rB   Ú_parse_version_many)r<   Úparsed_specifiersr   r   r   rU   Ë   s   ý

ù	÷	rU   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)*)?
    rI   Ú	SPECIFIERÚVERSION_PREFIX_TRAILTrL   z6.* suffix can only be used with `==` or `!=` operatorsr   )rN   Úspan_endÚVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr=   rc   )rQ   rS   rR   rD   r[   rB   )r<   ri   rN   r   r   r   rh   Ü   s0   
ýý

ý

írh   c                 C  r5   r6   )Ú_parse_full_markerr	   r   r9   r   r   r   Úparse_markerü   r;   ro   c                 C  s   t | ƒ}| jddd� |S )NrA   zend of marker expressionr?   )r\   rC   )r<   Úretvalr   r   r   rn      s   rn   c                 C  sB   t | ƒg}|  d¡r|  ¡ }t | ƒ}| |j|f¡ |  d¡s
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    ÚBOOLOP)Ú_parse_marker_atomrQ   rR   ÚextendrD   )r<   Ú
expressionÚtokenÚ
expr_rightr   r   r   r\     s   


ýr\   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?
    r=   rf   TrL   rg   zmarker expressionr_   N)rB   rQ   ra   r\   Ú_parse_marker_item)r<   r2   r   r   r   rr     s   
ý
ù€	
rr   Ú
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?
    r=   )rB   Ú_parse_marker_varÚ_parse_marker_op)r<   Úmarker_var_leftÚ	marker_opÚmarker_var_rightr   r   r   rw   (  s   




rw   Ú	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)rQ   Úprocess_env_varrR   rD   ÚreplaceÚprocess_python_strr[   ©r<   r   r   r   ry   6  s   


ÿry   Úenv_varc                 C  s   | dv rt dƒS t | ƒS )N)Úplatform_python_implementationÚpython_implementationr‰   )r!   )rˆ   r   r   r   r„   D  s   r„   Ú
python_strc                 C  s   t  | ¡}tt|ƒƒS r   )ÚastÚliteral_evalr'   r   )r‹   r   r   r   r   r†   K  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ÚNOTr=   zwhitespace after 'not'r?   z'in' after 'not'znot inÚOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rQ   rR   r)   rC   rD   r[   r‡   r   r   r   rz   P  s   


ÿrz   )r4   r   r   r,   )r<   r	   r   r,   )r<   r	   r   rH   )r<   r	   rN   rX   rO   r   r   r+   )r<   r	   r   r/   )r<   r	   r   r   )r4   r   r   r+   )r<   r	   r   r+   )r<   r	   r   r*   )r<   r	   r   rx   )r<   r	   r   r~   )rˆ   r   r   r!   )r‹   r   r   r'   )r<   r	   r   r)   )'Ú__doc__Ú
__future__r   rŒ   Útypingr   r   r   r   Ú
_tokenizerr   r	   r
   r!   r'   r)   r~   rx   r*   r   r+   r,   r:   r8   rF   rT   rE   rb   rU   rh   ro   rn   r\   rr   rw   ry   r„   r†   rz   r   r   r   r   Ú<module>   s>    



3




 






