a
    ç´«j_1  ã                   @  sö  d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
mZ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dddœdd„Zdddœdd„Zdddœdd„Zdd ddd!œd"d#„Zdd$dœd%d&„Zdd$dœd'd(„Zdddœd)d*„Z dddœd+d,„Z!dddœd-d.„Z"dddœd/d0„Z#dddœd1d2„Z$dddœd3d4„Z%dd5dœd6d7„Z&dd8dœd9d:„Z'ddd;œd<d=„Z(ddd>œd?d@„Z)dddœdAdB„Z*dS )Cz˜Handwritten parser of dependency specifiers.

The docstring for each __parse_* function contains EBNF-inspired grammar representing
the implementation.
é    )ÚannotationsN)ÚSequence)ÚLiteralÚ
NamedTupleÚUnioné   )ÚDEFAULT_RULESÚParserSyntaxErrorÚ	Tokenizerc                   @  sx   e Zd ZdZdddœdd„Zddœdd	„Zddœd
d„Zddœdd„Zddœdd„Zdddœdd„Z	dddœdd„Z
dS )ÚNode©ÚvalueÚstrÚNone)r   Úreturnc                 C  s
   || _ d S ©Nr   ©Úselfr   © r   úP/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/packaging/_parser.pyÚ__init__   s    zNode.__init__©r   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 ‚d S r   )ÚNotImplementedErrorr   r   r   r   Ú	serialize   s    zNode.serializec                 C  s   | j S 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)Ústater   c                 C  sš   t |tƒr|  |¡ d S t |tƒrZt|ƒdkrZ|\}}t |tƒrZd|v rZ|  |d ¡ d S t |tƒr~d|v r~|  |d ¡ d S td| jj› d|›�ƒ‚d S )Né   r   r#   z from )	r$   r   r&   ÚtupleÚlenÚdictr%   r   r   )r   r'   Ú_Z	slot_dictr   r   r   Ú__setstate__*   s    

zNode.__setstate__N)r   Ú
__module__Ú__qualname__Ú	__slots__r   r   r   r    r!   r&   r-   r   r   r   r   r      s   r   c                   @  s   e Zd ZdZddœdd„ZdS )ÚVariabler   r   r   c                 C  s   t | ƒS r   ©r   r   r   r   r   r    ?   s    zVariable.serializeN©r   r.   r/   r0   r    r   r   r   r   r1   <   s   r1   c                   @  s   e Zd ZdZddœdd„ZdS )ÚValuer   r   r   c                 C  s<   t | ƒ}d|vrd|› d�S d|vr0d|› d�S tdƒ‚d S )Nú"ú'z>Cannot serialize marker value containing both quote characters)r   Ú
ValueErrorr   r   r   r   r    F   s    ÿzValue.serializeNr3   r   r   r   r   r4   C   s   r4   c                   @  s   e Zd ZdZddœdd„ZdS )ÚOpr   r   r   c                 C  s   t | ƒS r   r2   r   r   r   r   r    T   s    zOp.serializeNr3   r   r   r   r   r8   Q   s   r8   )Ú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   r=   _   s
   
r=   r   )Úsourcer   c                 C  s   t t| td�ƒS ©N)Úrules)Ú_parse_requirementr
   r   ©rE   r   r   r   Úparse_requirementj   s    rJ   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=   )rK   Z
name_tokenr>   rA   r?   rB   rC   r   r   r   rH   n   s    
ÿ

rH   z"tuple[str, str, MarkerList | None]c                 C  sÜ   d}d}d}|   d¡rŒ|  ¡  |  d¡ | j}| jddd�j}| j dd	d
�rV|||fS | jddd� | j dd	d
�r||||fS t| |dd�}nF| j}t| ƒ}|  d¡ | j dd	d
�r¼|||fS t| ||rÊdndd�}|||fS )z~
    requirement_details = AT URL (WS requirement_marker?)?
                        | specifier WS? (requirement_marker)?
    Ú NÚATrL   ÚURLzURL after @rN   rP   T©Úpeekzwhitespace after URLz$semicolon (after URL and whitespace))Ú
span_startrO   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))ÚcheckÚreadrQ   ÚpositionrR   rS   Ú_parse_requirement_markerÚ_parse_specifier)rK   rB   r?   rC   Z	url_startZspecifier_startr   r   r   rU   ƒ   s>    



ý

ÿú
rU   Úint)rK   r[   rO   r   c                C  s@   |   d¡s"| jd|› d�|dd� |  ¡  t| ƒ}|  d¡ |S )z3
    requirement_marker = SEMICOLON marker WS?
    Ú	SEMICOLONz	Expected z or endN©r[   Úspan_endrL   )r\   Úraise_syntax_errorr]   Ú_parse_markerrQ   )rK   r[   rO   rC   r   r   r   r_   ¸   s    

ý
r_   r@   c                 C  sb   | j ddd�sg S | jdddd��, |  d¡ t| ƒ}|  d¡ W d  ƒ n1 sT0    Y  |S )	zG
    extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
    ZLEFT_BRACKETTrY   ZRIGHT_BRACKETrA   ©ZaroundrL   N)r\   Úenclosing_tokensrQ   Ú_parse_extras_list)rK   rA   r   r   r   rT   Í   s    ý
(rT   c                 C  s„   g }|   d¡s|S | |  ¡ j¡ |  d¡ | j ddd�rF|  d¡ n|   d¡sRq€|  ¡  |  d¡ | jddd�}| |j¡ q"|S )	z>
    extras_list = identifier (wsp* ',' wsp* identifier)*
    rM   rL   TrY   z"Expected comma between extra namesÚCOMMAzextra name after commarN   )r\   Úappendr]   rS   rQ   re   rR   )rK   rA   Zextra_tokenr   r   r   ri   à   s    



ri   c                 C  sP   | j dddd��, |  d¡ t| ƒ}|  d¡ W d  ƒ n1 sB0    Y  |S )zr
    specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
              | WS? version_many WS?
    ÚLEFT_PARENTHESISÚRIGHT_PARENTHESISzversion specifierrg   rL   N)rh   rQ   Ú_parse_version_many)rK   Úparsed_specifiersr   r   r   r`   û   s    ý
(r`   c                 C  sÄ   d}|   d¡rÀ| j}|  ¡ j}||7 }| j ddd�rpd}| d¡sV| d¡rZ| d	¡sZd
}| j||| jd d� | j ddd�r�| jd|| jd� |  d¡ |   d¡s¦qÀ||  ¡ j7 }|  d¡ q|S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    rV   Z	SPECIFIERZVERSION_PREFIX_TRAILTrY   z6.* suffix can only be used with `==` or `!=` operatorsz!=z==z===zN.* suffix cannot be used with pre-release, post-release, dev or local versionsr   rc   ZVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrL   rj   )r\   r^   r]   rS   Ú
startswithre   rQ   )rK   ro   r[   rB   Úmessager   r   r   rn     s>    


ÿÿÿýý

rn   c                 C  s   t t| td�ƒS rF   )Ú_parse_full_markerr
   r   rI   r   r   r   Úparse_marker5  s    rs   c                 C  s   t | ƒ}| jddd� |S )NrP   zend of marker expressionrN   )rf   rR   )rK   Úretvalr   r   r   rr   9  s    rr   c                 C  s:   t | ƒg}|  d¡r6|  ¡ }t | ƒ}| |j|f¡ q
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    ÚBOOLOP)Ú_parse_marker_atomr\   r]   ÚextendrS   )rK   Z
expressionÚtokenZ
expr_rightr   r   r   rf   ?  s    

rf   c                 C  s|   |   d¡ | jddd�rf| jdddd��, |   d¡ t| ƒ}|   d¡ W d  ƒ qn1 sZ0    Y  nt| ƒ}|   d¡ |S )	zw
    marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
                | WS? marker_item WS?
    rL   rl   TrY   rm   zmarker expressionrg   N)rQ   r\   rh   rf   Ú_parse_marker_item)rK   rC   r   r   r   rv   K  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?
    rL   )rQ   Ú_parse_marker_varÚ_parse_marker_op)rK   Zmarker_var_leftZ	marker_opZmarker_var_rightr   r   r   ry   a  s    



ry   Ú	MarkerVarc              
   C  sž   |   d¡r t|  ¡ j dd¡ƒS |   d¡rŽ|  ¡ }zt|jƒW S  ttfyŠ } z0td| j	|j
|j
t|jƒ fd�|‚W Y d}~qšd}~0 0 n| jdd	� dS )
z/
    marker_var = VARIABLE | QUOTED_STRING
    ÚVARIABLEÚ.r,   ZQUOTED_STRINGzInvalid quoted string)rE   ÚspanNz+Expected a marker variable or quoted string)rq   )r\   Úprocess_env_varr]   rS   ÚreplaceÚprocess_python_strÚSyntaxErrorr7   r	   rE   r^   r*   re   )rK   rx   Úexcr   r   r   r{   o  s"    

ýüÿr{   )Úenv_varr   c                 C  s   | dv rt dƒS t | ƒS d S )N)Úplatform_python_implementationÚpython_implementationr‡   )r1   )r†   r   r   r   r�   …  s    r�   )Ú
python_strr   c                 C  s   t  | ¡}tt|ƒƒS r   )ÚastÚliteral_evalr4   r   )r‰   r   r   r   r   rƒ   Œ  s    
rƒ   c                 C  sv   |   d¡r|  ¡  tdƒS |   d¡rP|  ¡  | jddd� | jddd� tdƒS |   d	¡rht|  ¡ jƒS |  d
¡S dS )z&
    marker_op = IN | NOT IN | OP
    ÚINÚinÚNOTrL   zwhitespace after 'not'rN   z'in' after 'not'znot inÚOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not inN)r\   r]   r8   rR   rS   re   )rK   r   r   r   r|   ‘  s    


ÿr|   )+Ú__doc__Ú
__future__r   rŠ   Úcollections.abcr   Útypingr   r   r   Ú
_tokenizerr   r	   r
   r   r1   r4   r8   ZMarkerLogicalr}   r)   rz   r;   Úlistr<   r=   rJ   rH   rU   r_   rT   ri   r`   rn   rs   rr   rf   rv   ry   r{   r�   rƒ   r|   r   r   r   r   Ú<module>   s@   ,5)