o
    Ñ­j²-  ã                   @  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                   @  sV   e Zd ZdZddd„Zddd	„Zdd
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   úN/var/www/html/CropPilot/venv/lib/python3.10/site-packages/packaging/_parser.pyÚ__init__   s   
zNode.__init__c                 C  ó   | 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.serializec                 C  r   r   r   r   r   r   r   Ú__getstate__   s   zNode.__getstate__Úobjectc                 C  s,   t |tƒstd| jj› d|›�ƒ‚|| _d S )NúCannot restore z value from )Ú
isinstancer   Ú	TypeErrorr   r   r   r   r   r   r   Ú_restore_value"   s
   
ÿ
zNode._restore_valueÚstatec                 C  s–   t |tƒr|  |¡ d S t |tƒr-t|ƒdkr-|\}}t |tƒr-d|v r-|  |d ¡ d S t |tƒr?d|v r?|  |d ¡ d S td| jj› d|›�ƒ‚)Né   r   r$   z from )	r%   r   r'   ÚtupleÚlenÚdictr&   r   r   )r   r(   Ú_Ú	slot_dictr   r   r   Ú__setstate__)   s   

zNode.__setstate__N)r   r   r   r   ©r   r   )r   r#   r   r   )r(   r#   r   r   )r   Ú
__module__Ú__qualname__Ú	__slots__r   r   r   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.serializeNr0   ©r   r1   r2   r3   r!   r   r   r   r   r5   ;   ó    r5   c                   @  r4   )ÚValuer   r   r   c                 C  s   d| › d�S )Nú"r   r   r   r   r   r!   E   s   zValue.serializeNr0   r9   r   r   r   r   r;   B   r:   r;   c                   @  r4   )ÚOpr   r   r   c                 C  r6   r   r7   r   r   r   r   r!   L   r8   zOp.serializeNr0   r9   r   r   r   r   r=   I   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   r1   r2   Ú__annotations__r   r   r   r   rB   W   s   
 rB   Úsourcer   r   c                 C  ó   t t| td�ƒS ©N)Úrules)Ú_parse_requirementr   r
   ©rJ   r   r   r   Úparse_requirementb   ó   rP   Ú	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_detailsrB   )rR   Ú
name_tokenrC   rF   rD   rG   rH   r   r   r   rN   f   s   
ÿ

rN   ú"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ÚATrS   ÚURLzURL after @rU   rW   T©Úpeekzwhitespace after URLz$semicolon (after URL and whitespace))Ú
span_startrV   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))ÚcheckÚreadrX   ÚpositionrY   rZ   Ú_parse_requirement_markerÚ_parse_specifier)rR   rG   rD   rH   Ú	url_startÚspecifier_startr   r   r   r\   {   s>   



ý

ÿú

r\   rd   ÚintrV   c                C  s@   |   d¡s| jd|› d�|dd� |  ¡  t| ƒ}|  d¡ |S )z3
    requirement_marker = SEMICOLON marker WS?
    Ú	SEMICOLONz	Expected z or endN©rd   Úspan_endrS   )re   Úraise_syntax_errorrf   Ú_parse_markerrX   )rR   rd   rV   rH   r   r   r   rh   °   s   

ý
rh   rE   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_BRACKETTrb   ÚRIGHT_BRACKETrF   ©ÚaroundrS   N)re   Úenclosing_tokensrX   Ú_parse_extras_list)rR   rF   r   r   r   r[   Å   s   ý

ù	÷	r[   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)*
    rT   TrS   rb   z"Expected comma between extra namesÚCOMMAzextra name after commarU   )re   Úappendrf   rZ   rX   rp   rY   )rR   rF   Úextra_tokenr   r   r   rw   Ø   s    


ú
õrw   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 specifierrt   rS   N)rv   rX   Ú_parse_version_many)rR   Úparsed_specifiersr   r   r   ri   ó   s   ý

ù	÷	ri   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)*)?
    r_   Ú	SPECIFIERÚVERSION_PREFIX_TRAILTrb   z6.* suffix can only be used with `==` or `!=` operatorsr	   rn   ÚVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrS   rx   )re   rg   rf   rZ   rp   rX   )rR   r~   rd   r   r   r   r}     s0   
ýý

ý

ír}   c                 C  rK   rL   )Ú_parse_full_markerr   r
   rO   r   r   r   Úparse_marker$  rQ   rƒ   c                 C  s   t | ƒ}| jddd� |S )NrW   zend of marker expressionrU   )rq   rY   )rR   Úretvalr   r   r   r‚   (  s   r‚   c                 C  sB   t | ƒg}|  d¡r|  ¡ }t | ƒ}| |j|f¡ |  d¡s
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    ÚBOOLOP)Ú_parse_marker_atomre   rf   ÚextendrZ   )rR   Ú
expressionÚtokenÚ
expr_rightr   r   r   rq   .  s   


ýrq   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?
    rS   r{   Trb   r|   zmarker expressionrt   N)rX   re   rv   rq   Ú_parse_marker_item)rR   rH   r   r   r   r†   :  s   
ý
ù€	
r†   Ú
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?
    rS   )rX   Ú_parse_marker_varÚ_parse_marker_op)rR   Úmarker_var_leftÚ	marker_opÚmarker_var_rightr   r   r   r‹   P  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Ú.r-   ÚQUOTED_STRINGz+Expected a marker variable or quoted string)ÚmessageN)re   Úprocess_env_varrf   rZ   ÚreplaceÚprocess_python_strrp   ©rR   r   r   r   r�   ^  s   


ÿr�   Úenv_varc                 C  s   | dv rt dƒS t | ƒS )N)Úplatform_python_implementationÚpython_implementationrœ   )r5   )r›   r   r   r   r—   l  s   r—   Ú
python_strc                 C  s   t  | ¡}tt|ƒƒS r   )ÚastÚliteral_evalr;   r   )rž   r   r   r   r   r™   s  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ÚNOTrS   zwhitespace after 'not'rU   z'in' after 'not'znot inÚOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)re   rf   r=   rY   rZ   rp   rš   r   r   r   rŽ   x  s   


ÿrŽ   )rJ   r   r   rB   )rR   r   r   rB   )rR   r   r   r^   )rR   r   rd   rl   rV   r   r   rA   )rR   r   r   rE   )rR   r   r   r   )rJ   r   r   rA   )rR   r   r   rA   )rR   r   r   r@   )rR   r   r   rŒ   )rR   r   r   r’   )r›   r   r   r5   )rž   r   r   r;   )rR   r   r   r=   ))Ú__doc__Ú
__future__r   rŸ   Útypingr   r   r   r   r   r   Ú
_tokenizerr
   r   r   r5   r;   r=   ÚMarkerLogicalr’   rŒ   r@   rA   rB   rP   rN   r\   rh   r[   rw   ri   r}   rƒ   r‚   rq   r†   r‹   r�   r—   r™   rŽ   r   r   r   r   Ú<module>   s@     ,



5




 






