U
    ZÊ¹jk(  ã                   @   sÞ  d 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eef Zeeeef ZeZee ZG dd„ deƒZeedœdd„Zeedœdd„Zeeeeee f dœdd„Zeeeedœdd„Zeee dœdd„Zeee dœdd„Zeedœdd „Zeedœd!d"„Zeedœd#d$„Zeedœd%d&„Z eedœd'd(„Z!eedœd)d*„Z"eedœd+d,„Z#eedœd-d.„Z$eed/œd0d1„Z%eed2œd3d4„Z&eedœd5d6„Z'dS )7z˜Handwritten parser of dependency specifiers.

The docstring for each __parse_* function contains EBNF-inspired grammar representing
the implementation.
é    N)ÚAnyÚListÚ
NamedTupleÚOptionalÚTupleÚUnioné   )ÚDEFAULT_RULESÚ	Tokenizerc                   @   sF   e Zd Zeddœdd„Zedœdd„Zedœdd	„Zedœd
d„ZdS )ÚNodeN)ÚvalueÚreturnc                 C   s
   || _ d S ©N©r   )Úselfr   © r   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/wheel/vendored/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| › d�S )Nú<z('z')>)Ú	__class__Ú__name__r   r   r   r   Ú__repr__   s    zNode.__repr__c                 C   s   t ‚d S r   )ÚNotImplementedErrorr   r   r   r   Ú	serialize   s    zNode.serialize)r   Ú
__module__Ú__qualname__Ústrr   r   r   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zedœdd„ZdS )ÚVariabler   c                 C   s   t | ƒS r   ©r   r   r   r   r   r      s    zVariable.serializeN©r   r   r   r   r   r   r   r   r   r       s   r    c                   @   s   e Zd Zedœdd„ZdS )ÚValuer   c                 C   s   d| › d�S )Nú"r   r   r   r   r   r   !   s    zValue.serializeNr"   r   r   r   r   r#       s   r#   c                   @   s   e Zd Zedœdd„ZdS )ÚOpr   c                 C   s   t | ƒS r   r!   r   r   r   r   r   &   s    zOp.serializeNr"   r   r   r   r   r%   %   s   r%   c                   @   s>   e Zd ZU eed< eed< ee ed< eed< ee ed< dS )ÚParsedRequirementÚnameÚurlÚextrasÚ	specifierÚmarkerN)r   r   r   r   Ú__annotations__r   r   Ú
MarkerListr   r   r   r   r&   4   s
   
r&   )Úsourcer   c                 C   s   t t| td�ƒS ©N)Úrules)Ú_parse_requirementr
   r	   ©r.   r   r   r   Úparse_requirement?   s    r3   )Ú	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&   )r4   Ú
name_tokenr'   r)   r(   r*   r+   r   r   r   r1   C   s    
 ÿ

r1   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ÚATr5   ÚURLzURL after @r7   r9   T©Úpeekzwhitespace after URLzURL and whitespace)Ú
span_startÚafterúversion specifierz#name and no valid version specifier)ÚcheckÚreadr:   Úpositionr;   r<   Ú_parse_requirement_markerÚ_parse_specifier)r4   r*   r(   r+   Ú	url_startÚspecifier_startr   r   r   r>   X   s>    



  ÿ

ÿú
r>   )r4   rE   rF   r   c                C   s>   |   d¡s | jd|› d�|d� |  ¡  t| ƒ}|  d¡ |S )z3
    requirement_marker = SEMICOLON marker WS?
    Ú	SEMICOLONz!Expected end or semicolon (after ú))rE   r5   )rH   Úraise_syntax_errorrI   Ú_parse_markerr:   )r4   rE   rF   r+   r   r   r   rK   ‹   s    

þ
rK   c              	   C   sN   | j ddd�sg S | jdddd��" |  d¡ t| ƒ}|  d¡ W 5 Q R X |S )zG
    extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
    ÚLEFT_BRACKETTrC   ÚRIGHT_BRACKETr)   ©Úaroundr5   )rH   Úenclosing_tokensr:   Ú_parse_extras_list)r4   r)   r   r   r   r=   Ÿ   s    ý
r=   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)*
    r6   r5   TrC   z"Expected comma between extra namesÚCOMMAzextra name after commar7   )rH   ÚappendrI   r<   r:   rQ   r;   )r4   r)   Úextra_tokenr   r   r   rX   ²   s    



rX   c              	   C   s<   | j dddd��" |  d¡ t| ƒ}|  d¡ W 5 Q R X |S )zr
    specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
              | WS? version_many WS?
    ÚLEFT_PARENTHESISÚRIGHT_PARENTHESISrG   rU   r5   )rW   r:   Ú_parse_version_many)r4   Úparsed_specifiersr   r   r   rL   Í   s    ý
rL   c                 C   sš   d}|   d¡r–| j}||  ¡ j7 }| j ddd�rF| jd|| jd d� | j d	dd�rf| jd
|| jd� |  d¡ |   d¡s|q–||  ¡ j7 }|  d¡ q|S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    r@   Ú	SPECIFIERÚVERSION_PREFIX_TRAILTrC   z6.* suffix can only be used with `==` or `!=` operatorsr   )rE   Úspan_endÚVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr5   rY   )rH   rJ   rI   r<   rQ   r:   )r4   r_   rE   r   r   r   r^   Þ   s,    
ýý

r^   c                 C   s   t t| td�ƒS r/   )Ú_parse_full_markerr
   r	   r2   r   r   r   Úparse_markerþ   s    re   c                 C   s   t | ƒ}| jddd� |S )Nr9   zend of marker expressionr7   )rR   r;   )r4   Úretvalr   r   r   rd     s    rd   c                 C   s:   t | ƒg}|  d¡r6|  ¡ }t | ƒ}| |j|f¡ q
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    ÚBOOLOP)Ú_parse_marker_atomrH   rI   Úextendr<   )r4   Ú
expressionÚtokenÚ
expr_rightr   r   r   rR     s    

rR   c              	   C   sh   |   d¡ | jddd�rR| jdddd��" |   d¡ t| ƒ}|   d¡ W 5 Q R X nt| ƒ}|   d¡ |S )zw
    marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
                | WS? marker_item WS?
    r5   r\   TrC   r]   zmarker expressionrU   )r:   rH   rW   rR   Ú_parse_marker_item)r4   r+   r   r   r   rh     s    
ý

rh   c                 C   sJ   |   d¡ t| ƒ}|   d¡ t| ƒ}|   d¡ t| ƒ}|   d¡ |||fS )zG
    marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
    r5   )r:   Ú_parse_marker_varÚ_parse_marker_op)r4   Úmarker_var_leftÚ	marker_opÚmarker_var_rightr   r   r   rm   *  s    



rm   c                 C   sH   |   d¡r t|  ¡ j dd¡ƒS |   d¡r8t|  ¡ jƒS | jdd� dS )z/
    marker_var = VARIABLE | QUOTED_STRING
    ÚVARIABLEÚ.Ú_ÚQUOTED_STRINGz+Expected a marker variable or quoted string)ÚmessageN)rH   Úprocess_env_varrI   r<   ÚreplaceÚprocess_python_strrQ   ©r4   r   r   r   rn   8  s    

ÿrn   )Úenv_varr   c                 C   s   | dkrt dƒS t | ƒS d S )N)Úplatform_python_implementationÚpython_implementationr}   )r    )r|   r   r   r   rx   F  s    rx   )Ú
python_strr   c                 C   s   t  | ¡}tt|ƒƒS r   )ÚastÚliteral_evalr#   r   )r   r   r   r   r   rz   M  s    
rz   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ÚNOTr5   zwhitespace after 'not'r7   z'in' after 'not'znot inÚOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not inN)rH   rI   r%   r;   r<   rQ   r{   r   r   r   ro   R  s    


ÿro   )(Ú__doc__r€   Útypingr   r   r   r   r   r   Ú
_tokenizerr	   r
   r   r    r#   r%   Ú	MarkerVarÚ
MarkerItemÚ
MarkerAtomr-   r&   r   r3   r1   r>   ÚintrK   r=   rX   rL   r^   re   rd   rR   rh   rm   rn   rx   rz   ro   r   r   r   r   Ú<module>   sF    þ4  þ 