U
    M»{jí'  ã                   @  sâ  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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-d.„Zdddœd/d0„Z dddœd1d2„Z!dd3dœd4d5„Z"dd6dœd7d8„Z#dd
d9œd:d;„Z$ddd<œd=d>„Z%dddœd?d@„Z&dS )Az˜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                   @  sF   e 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S )ÚNodeÚstrÚNone)ÚvalueÚreturnc                 C  s
   || _ d S ©N©r   )Úselfr   © r   úP/var/www/html/bwave/python/venv/lib/python3.8/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| › 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.serializeN)r   Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r
      s   r
   c                   @  s   e Zd Zddœdd„ZdS )ÚVariabler   r   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       s   r    c                   @  s   e Zd Zddœdd„ZdS )ÚValuer   r   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ddœdd„ZdS )ÚOpr   r   c                 C  s   t | ƒS r   r!   r   r   r   r   r   (   s    zOp.serializeNr"   r   r   r   r   r%   '   s   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(   r   )Úsourcer   c                 C  s   t t| td�ƒS ©N)Úrules)Ú_parse_requirementr	   r   ©r0   r   r   r   Úparse_requirement=   s    r5   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(   )r6   Ú
name_tokenr)   r,   r*   r-   r.   r   r   r   r3   A   s    
 ÿ

r3   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ÚATr7   ÚURLzURL after @r9   r;   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)r6   r-   r*   r.   Ú	url_startÚspecifier_startr   r   r   r@   V   s>    



  ÿ

ÿú
r@   Úint)r6   rG   rH   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 ú))rG   r7   )rJ   Úraise_syntax_errorrK   Ú_parse_markerr<   )r6   rG   rH   r.   r   r   r   rM   ‰   s    

þ
rM   r+   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_BRACKETTrE   ÚRIGHT_BRACKETr,   ©Úaroundr7   )rJ   Úenclosing_tokensr<   Ú_parse_extras_list)r6   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)*
    r8   r7   TrE   z"Expected comma between extra namesÚCOMMAzextra name after commar9   )rJ   ÚappendrK   r>   r<   rT   r=   )r6   r,   Úextra_tokenr   r   r   r[   °   s    



r[   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_PARENTHESISrI   rX   r7   )rZ   r<   Ú_parse_version_many)r6   Úparsed_specifiersr   r   r   rN   Ë   s    ý
rN   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)*)?
    rB   Ú	SPECIFIERÚVERSION_PREFIX_TRAILTrE   z6.* suffix can only be used with `==` or `!=` operatorsr   )rG   Úspan_endÚVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr7   r\   )rJ   rL   rK   r>   rT   r<   )r6   rb   rG   r   r   r   ra   Ü   s,    
ýý

ra   c                 C  s   t t| td�ƒS r1   )Ú_parse_full_markerr	   r   r4   r   r   r   Úparse_markerü   s    rh   c                 C  s   t | ƒ}| jddd� |S )Nr;   zend of marker expressionr9   )rU   r=   )r6   Úretvalr   r   r   rg      s    rg   c                 C  s:   t | ƒg}|  d¡r6|  ¡ }t | ƒ}| |j|f¡ q
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    ÚBOOLOP)Ú_parse_marker_atomrJ   rK   Úextendr>   )r6   Ú
expressionÚtokenÚ
expr_rightr   r   r   rU     s    

rU   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?
    r7   r_   TrE   r`   zmarker expressionrX   )r<   rJ   rZ   rU   Ú_parse_marker_item)r6   r.   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?
    r7   )r<   Ú_parse_marker_varÚ_parse_marker_op)r6   Úmarker_var_leftÚ	marker_opÚmarker_var_rightr   r   r   rp   (  s    



rp   Ú	MarkerVarc                 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)rJ   Úprocess_env_varrK   r>   ÚreplaceÚprocess_python_strrT   ©r6   r   r   r   rr   6  s    

ÿrr   )Ú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   r}   D  s    r}   )Ú
python_strr   c                 C  s   t  | ¡}tt|ƒƒS r   )ÚastÚliteral_evalr#   r   )r„   r   r   r   r   r   K  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ÚNOTr7   zwhitespace after 'not'r9   z'in' after 'not'znot inÚOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not inN)rJ   rK   r%   r=   r>   rT   r€   r   r   r   rs   P  s    


ÿrs   )'Ú__doc__Ú
__future__r   r…   Útypingr   r   r   r   Ú
_tokenizerr   r	   r
   r    r#   r%   rw   rq   r&   r   r'   r(   r5   r3   r@   rM   r?   r[   rN   ra   rh   rg   rU   rk   rp   rr   r}   r   rs   r   r   r   r   Ú<module>   s<   3 