U
    X7h'                     @  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 )AzHandwritten 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   ^/var/www/formularioweb/env/lib/python3.8/site-packages/setuptools/_vendor/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)Zrules)_parse_requirementr	   r   r0   r   r   r   parse_requirement=   s    r4   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ZexpectedENDzend of dependency specifier)consumeexpecttext_parse_extras_parse_requirement_detailsr(   )r5   Z
name_tokenr)   r,   r*   r-   r.   r   r   r   r2   A   s    
 

r2   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| ||rdndd}|||fS )z~
    requirement_details = AT URL (WS requirement_marker?)?
                        | specifier WS? (requirement_marker)?
     NATr6   ZURLzURL after @r8   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)r5   r-   r*   r.   Z	url_startZspecifier_startr   r   r   r>   V   s>    



  


r>   int)r5   rC   rD   r   c                C  s>   |  ds | jd| d|d |   t| }| d |S )z3
    requirement_marker = SEMICOLON marker WS?
    Z	SEMICOLONz!Expected end or semicolon (after ))rC   r6   )rF   raise_syntax_errorrG   _parse_markerr:   )r5   rC   rD   r.   r   r   r   rI      s    


rI   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)?
    ZLEFT_BRACKETTrA   ZRIGHT_BRACKETr,   Zaroundr6   )rF   enclosing_tokensr:   _parse_extras_list)r5   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)*
    r7   r6   TrA   z"Expected comma between extra namesCOMMAzextra name after commar8   )rF   appendrG   r<   r:   rM   r;   )r5   r,   Zextra_tokenr   r   r   rQ      s    



rQ   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_PARENTHESISrE   rO   r6   )rP   r:   _parse_version_many)r5   parsed_specifiersr   r   r   rJ      s    
rJ   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?   Z	SPECIFIERZVERSION_PREFIX_TRAILTrA   z6.* suffix can only be used with `==` or `!=` operatorsr   )rC   Zspan_endZVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr6   rR   )rF   rH   rG   r<   rM   r:   )r5   rW   rC   r   r   r   rV      s,    


rV   c                 C  s   t t| tdS r1   )_parse_full_markerr	   r   r3   r   r   r   parse_marker   s    rY   c                 C  s   t | }| jddd |S )Nr9   zend of marker expressionr8   )rN   r;   )r5   Zretvalr   r   r   rX      s    rX   c                 C  s:   t | g}| dr6|  }t | }||j|f q
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    ZBOOLOP)_parse_marker_atomrF   rG   extendr<   )r5   Z
expressiontokenZ
expr_rightr   r   r   rN     s    

rN   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?
    r6   rT   TrA   rU   zmarker expressionrO   )r:   rF   rP   rN   _parse_marker_item)r5   r.   r   r   r   rZ     s    


rZ   
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?
    r6   )r:   _parse_marker_var_parse_marker_op)r5   Zmarker_var_leftZ	marker_opZmarker_var_rightr   r   r   r]   (  s    



r]   	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
    ZVARIABLE._ZQUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rF   process_env_varrG   r<   replaceprocess_python_strrM   r5   r   r   r   r_   6  s    

r_   )env_varr   c                 C  s   | dkrt dS t | S d S )N)platform_python_implementationpython_implementationrj   )r    )ri   r   r   r   re   D  s    re   )
python_strr   c                 C  s   t | }tt|S r   )astliteral_evalr#   r   )rl   r   r   r   r   rg   K  s    
rg   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inZNOTr6   zwhitespace after 'not'r8   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not inN)rF   rG   r%   r;   r<   rM   rh   r   r   r   r`   P  s    


r`   )'__doc__
__future__r   rm   typingr   r   r   r   
_tokenizerr   r	   r
   r    r#   r%   ra   r^   r&   r   r'   r(   r4   r2   r>   rI   r=   rQ   rJ   rV   rY   rX   rN   rZ   r]   r_   re   rg   r`   r   r   r   r   <module>   s<   3 