o
    PZh'                     @  sx  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dCddZdDddZdEddZdFd"d#ZdGd%d&ZdGd'd(ZdHd)d*ZdHd+d,ZdId-d.ZdJd/d0ZdJd1d2Z dKd3d4Z!dLd6d7Z"dMd9d:Z#dNd<d=Z$dOd?d@Z%dPdAdBZ&dS )QzHandwritten 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                   @  s4   e Zd ZdddZdddZdd	d
ZdddZdS )NodevaluestrreturnNonec                 C  s
   || _ d S Nr   )selfr    r   @/var/www/auris/lib/python3.10/site-packages/packaging/_parser.py__init__   s   
zNode.__init__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 r   )NotImplementedErrorr   r   r   r   	serialize   s   zNode.serializeN)r   r   r   r   r   r   )r   
__module____qualname__r   r   r   r   r   r   r   r   r
      s
    


r
   c                   @     e Zd ZdddZdS )Variabler   r   c                 C     t | S r   r   r   r   r   r   r         zVariable.serializeNr   r   r   r   r   r   r   r   r   r!          r!   c                   @  r    )Valuer   r   c                 C  s   d|  dS )N"r   r   r   r   r   r   #   s   zValue.serializeNr   r%   r   r   r   r   r'   "   r&   r'   c                   @  r    )Opr   r   c                 C  r"   r   r#   r   r   r   r   r   (   r$   zOp.serializeNr   r%   r   r   r   r   r)   '   r&   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,   sourcer   r   c                 C     t t| tdS N)rules)_parse_requirementr	   r   r4   r   r   r   parse_requirement=      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,   )r<   Z
name_tokenr-   r0   r.   r1   r2   r   r   r   r8   A   s   


r8   "tuple[str, str, MarkerList | None]c                 C  s   d}d}d}|  drF|   | d | j}| jdddj}| j dd	d
r+|||fS | jddd | j dd	d
r>|||fS t| |dd}n#| j}t| }| d | j dd	d
r^|||fS t| ||redndd}|||fS )z~
    requirement_details = AT URL (WS requirement_marker?)?
                        | specifier WS? (requirement_marker)?
     NATr=   URLzURL after @r?   rA   Tpeekzwhitespace after URLzURL and whitespace)
span_startafterversion specifierz#name and no valid version specifier)checkreadrB   positionrC   rD   _parse_requirement_marker_parse_specifier)r<   r1   r.   r2   Z	url_startZspecifier_startr   r   r   rF   V   s:   







rF   rM   intrN   c                C  s>   |  ds| jd| d|d |   t| }| d |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz!Expected end or semicolon (after ))rM   r=   )rP   raise_syntax_errorrQ   _parse_markerrB   )r<   rM   rN   r2   r   r   r   rS      s   


rS   r/   c                 C  sd   | j ddds	g S | jdddd | d t| }| d W d   |S 1 s+w   Y  |S )	zG
    extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
    ZLEFT_BRACKETTrK   ZRIGHT_BRACKETr0   Zaroundr=   N)rP   enclosing_tokensrB   _parse_extras_list)r<   r0   r   r   r   rE      s   

		rE   c                 C  s   g }|  ds	|S ||  j 	 | d | j dddr$| d n|  ds,	 |S |   | d | jddd}||j q)	z>
    extras_list = identifier (wsp* ',' wsp* identifier)*
    r>   Tr=   rK   z"Expected comma between extra namesCOMMAzextra name after commar?   )rP   appendrQ   rD   rB   rX   rC   )r<   r0   Zextra_tokenr   r   r   r\      s    



r\   c                 C  sR   | j dddd | d t| }| d W d   |S 1 s"w   Y  |S )zr
    specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
              | WS? version_many WS?
    LEFT_PARENTHESISRIGHT_PARENTHESISrO   rZ   r=   N)r[   rB   _parse_version_many)r<   parsed_specifiersr   r   r   rT      s   

		rT   c                 C  s   d}|  drQ| j}||  j7 }| j dddr#| jd|| jd d | j d	ddr3| jd
|| jd | d |  ds@	 |S ||  j7 }| d |  ds|S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    rH   Z	SPECIFIERZVERSION_PREFIX_TRAILTrK   z6.* suffix can only be used with `==` or `!=` operatorsr   )rM   span_endZVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr=   r]   )rP   rR   rQ   rD   rX   rB   )r<   rb   rM   r   r   r   ra      s0   




ra   c                 C  r5   r6   )_parse_full_markerr	   r   r9   r   r   r   parse_marker   r;   re   c                 C  s   t | }| jddd |S )NrA   zend of marker expressionr?   )rY   rC   )r<   retvalr   r   r   rd      s   rd   c                 C  sB   t | g}| dr|  }t | }||j|f | ds
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    BOOLOP)_parse_marker_atomrP   rQ   extendrD   )r<   Z
expressiontokenZ
expr_rightr   r   r   rY     s   


rY   c                 C  s|   |  d | jdddr3| jdddd |  d t| }|  d W d   n1 s-w   Y  nt| }|  d |S )	zw
    marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
                | WS? marker_item WS?
    r=   r_   TrK   r`   zmarker expressionrZ   N)rB   rP   r[   rY   _parse_marker_item)r<   r2   r   r   r   rh     s   

	
rh   
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?
    r=   )rB   _parse_marker_var_parse_marker_op)r<   Zmarker_var_leftZ	marker_opZmarker_var_rightr   r   r   rk   (  s   




rk   	MarkerVarc                 C  sH   |  drt|  jddS |  drt|  jS | jdd dS )z/
    marker_var = VARIABLE | QUOTED_STRING
    VARIABLE._ZQUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rP   process_env_varrQ   rD   replaceprocess_python_strrX   r<   r   r   r   rm   6  s   


rm   env_varc                 C  s   | dv rt dS t | S )N)platform_python_implementationpython_implementationry   )r!   )rx   r   r   r   rt   D  s   rt   
python_strc                 C  s   t | }tt|S r   )astliteral_evalr'   r   )r{   r   r   r   r   rv   K  s   
rv   c                 C  sr   |  dr|   tdS |  dr(|   | jddd | jddd tdS |  d	r4t|  jS | d
S )z&
    marker_op = IN | NOT IN | OP
    INinNOTr=   zwhitespace after 'not'r?   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rP   rQ   r)   rC   rD   rX   rw   r   r   r   rn   P  s   


rn   )r4   r   r   r,   )r<   r	   r   r,   )r<   r	   r   rG   )r<   r	   rM   rU   rN   r   r   r+   )r<   r	   r   r/   )r<   r	   r   r   )r4   r   r   r+   )r<   r	   r   r+   )r<   r	   r   r*   )r<   r	   r   rl   )r<   r	   r   ro   )rx   r   r   r!   )r{   r   r   r'   )r<   r	   r   r)   )'__doc__
__future__r   r|   typingr   r   r   r   Z
_tokenizerr   r	   r
   r!   r'   r)   ro   rl   r*   r   r+   r,   r:   r8   rF   rS   rE   r\   rT   ra   re   rd   rY   rh   rk   rm   rt   rv   rn   r   r   r   r   <module>   s>    



3




 






