a
    b3j-                     @  s  d Z ddlm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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.d/Z!dddd0d1Z"dddd2d3Z#dd4dd5d6Z$dd7dd8d9Z%dd
d:d;d<Z&ddd=d>d?Z'dddd@dAZ(dS )BzHandwritten parser of dependency specifiers.

The docstring for each __parse_* function contains EBNF-inspired grammar representing
the implementation.
    )annotationsN)ListLiteral
NamedTupleSequenceTupleUnion   )DEFAULT_RULES	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   n/www/wwwroot/dpstar/app/297b3aabda72fedb274352021c2dd8b5_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/   r0   r1   r!   r   r   r   r   r2   ;   s   r2   c                   @  s   e Zd ZdZddddZdS )Valuer   r   r   c                 C  s   d|  dS )N"r   r   r   r   r   r!   E   s    zValue.serializeNr4   r   r   r   r   r5   B   s   r5   c                   @  s   e Zd ZdZddddZdS )Opr   r   r   c                 C  s   t | S r   r3   r   r   r   r   r!   L   s    zOp.serializeNr4   r   r   r   r   r7   I   s   r7   )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/   r0   __annotations__r   r   r   r   r<   W   s
   
r<   r   )sourcer   c                 C  s   t t| tdS N)rules)_parse_requirementr   r
   rD   r   r   r   parse_requirementb   s    rI   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<   )rJ   Z
name_tokenr=   r@   r>   rA   rB   r   r   r   rG   f   s    


rG   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ATrK   URLzURL after @rM   rO   Tpeekzwhitespace after URLz$semicolon (after URL and whitespace))
span_startrN   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))checkreadrP   positionrQ   rR   _parse_requirement_marker_parse_specifier)rJ   rA   r>   rB   Z	url_startZspecifier_startr   r   r   rT   {   s>    






rT   int)rJ   rZ   rN   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rZ   Zspan_endrK   )r[   raise_syntax_errorr\   _parse_markerrP   )rJ   rZ   rN   rB   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_BRACKETTrX   ZRIGHT_BRACKETr@   ZaroundrK   N)r[   enclosing_tokensrP   _parse_extras_list)rJ   r@   r   r   r   rS      s    
(rS   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)*
    rL   rK   TrX   z"Expected comma between extra namesCOMMAzextra name after commarM   )r[   appendr\   rR   rP   rc   rQ   )rJ   r@   Zextra_tokenr   r   r   rg      s    



rg   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 specifierre   rK   N)rf   rP   _parse_version_many)rJ   parsed_specifiersr   r   r   r_      s    
(r_   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)*)?
    rU   Z	SPECIFIERZVERSION_PREFIX_TRAILTrX   z6.* suffix can only be used with `==` or `!=` operatorsr	   rb   ZVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrK   rh   )r[   r]   r\   rR   rc   rP   )rJ   rm   rZ   r   r   r   rl     s,    


rl   c                 C  s   t t| tdS rE   )_parse_full_markerr   r
   rH   r   r   r   parse_marker$  s    ro   c                 C  s   t | }| jddd |S )NrO   zend of marker expressionrM   )rd   rQ   )rJ   retvalr   r   r   rn   (  s    rn   c                 C  s:   t | g}| dr6|  }t | }||j|f q
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    BOOLOP)_parse_marker_atomr[   r\   extendrR   )rJ   Z
expressiontokenZ
expr_rightr   r   r   rd   .  s    

rd   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?
    rK   rj   TrX   rk   zmarker expressionre   N)rP   r[   rf   rd   _parse_marker_item)rJ   rB   r   r   r   rr   :  s    

*
rr   
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?
    rK   )rP   _parse_marker_var_parse_marker_op)rJ   Zmarker_var_leftZ	marker_opZmarker_var_rightr   r   r   ru   P  s    



ru   	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.r-   ZQUOTED_STRINGz+Expected a marker variable or quoted string)messageN)r[   process_env_varr\   rR   replaceprocess_python_strrc   rJ   r   r   r   rw   ^  s    

rw   )env_varr   c                 C  s   | dv rt dS t | S d S )N)platform_python_implementationpython_implementationr   )r2   )r   r   r   r   r}   l  s    r}   )
python_strr   c                 C  s   t | }tt|S r   )astliteral_evalr5   r   )r   r   r   r   r   r   s  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NOTrK   zwhitespace after 'not'rM   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not inN)r[   r\   r7   rQ   rR   rc   r   r   r   r   rx   x  s    


rx   ))__doc__
__future__r   r   typingr   r   r   r   r   r   
_tokenizerr
   r   r   r2   r5   r7   ZMarkerLogicalry   rv   r:   r;   r<   rI   rG   rT   r^   rS   rg   r_   rl   ro   rn   rd   rr   ru   rw   r}   r   rx   r   r   r   r   <module>   s>    ,5 