U
    W7hk(                     @   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 )7zHandwritten 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   Z/var/www/formularioweb/env/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| ||rd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   