o
    Éó·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   úWC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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| 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 specifierN)ÚconsumeÚexpectÚtextÚ_parse_extrasÚ_parse_requirement_detailsr2   )rB   Z
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   Z	url_startZspecifier_startr   r   r   rL   _   s>   



ý

ÿú

rL   rS   Ú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©rS   Zspan_endrC   )rT   Úraise_syntax_errorrU   Ú_parse_markerrH   )rB   rS   rF   r8   r   r   r   rW   ”   s   

ý
rW   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)?
    ZLEFT_BRACKETTrQ   ZRIGHT_BRACKETr6   ©ZaroundrC   N)rT   Ú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   rQ   z"Expected comma between extra namesÚCOMMAzextra name after commarE   N)rT   ÚappendrU   rJ   rH   r\   rI   )rB   r6   Zextra_tokenr   r   r   r`   ¼   s    


ú
õr`   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 specifierr^   rC   N)r_   rH   Ú_parse_version_many)rB   Úparsed_specifiersr   r   r   rX   ×   s   ý

ù	÷	rX   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)*)?
    rN   Z	SPECIFIERZVERSION_PREFIX_TRAILTrQ   z6.* suffix can only be used with `==` or `!=` operatorsr	   r[   ZVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrC   ra   N)rT   rV   rU   rJ   r\   rH   )rB   rf   rS   r   r   r   re   è   s0   
ýý

ý

íre   c                 C  r;   r<   )Ú_parse_full_markerr   r
   r?   r   r   r   Úparse_marker  rA   rh   c                 C  s   t | ƒ}| jddd� |S )NrG   zend of marker expressionrE   )r]   rI   )rB   Úretvalr   r   r   rg     s   rg   c                 C  sB   t | ƒg}|  d¡r|  ¡ }t | ƒ}| |j|f¡ |  d¡s
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    ÚBOOLOPN)Ú_parse_marker_atomrT   rU   ÚextendrJ   )rB   Z
expressionÚtokenZ
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?
    rC   rc   TrQ   rd   zmarker expressionr^   N)rH   rT   r_   r]   Ú_parse_marker_item)rB   r8   r   r   r   rk     s   
ý
ù	
rk   Ú
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   N)rH   Ú_parse_marker_varÚ_parse_marker_op)rB   Zmarker_var_leftZ	marker_opZmarker_var_rightr   r   r   rn   4  s   




rn   Ú	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Ú.Ú_ZQUOTED_STRINGz+Expected a marker variable or quoted string)ÚmessageN)rT   Úprocess_env_varrU   rJ   ÚreplaceÚprocess_python_strr\   ©rB   r   r   r   rp   B  s   


ÿrp   Úenv_varc                 C  s   | dv rt dƒS t | ƒS )N)Úplatform_python_implementationÚpython_implementationr|   )r%   )r{   r   r   r   rw   P  s   rw   Ú
python_strc                 C  s   t  | ¡}tt|ƒƒS r   )ÚastÚliteral_evalr+   r   )r~   r   r   r   r   ry   W  s   
ry   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 inN)rT   rU   r-   rI   rJ   r\   rz   r   r   r   rq   \  s   


ÿrq   )r:   r   r   r2   )rB   r   r   r2   )rB   r   r   rM   )rB   r   rS   rY   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   ro   )rB   r   r   rr   )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-   ZMarkerLogicalrr   ro   r0   r1   r2   r@   r>   rL   rW   rK   r`   rX   re   rh   rg   r]   rk   rn   rp   rw   ry   rq   r   r   r   r   Ú<module>   s@     



5




 






