o
    j-                     @  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dDddZdEddZdFddZdGd#d$ZdHd&d'ZdHd(d)ZdId*d+ZdId,d-ZdJd.d/Z dKd0d1Z!dKd2d3Z"dLd4d5Z#dMd7d8Z$dNd:d;Z%dOd=d>Z&dPd@dAZ'dQdBdCZ(dS )RzHandwritten 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                   @  sV   e Zd ZdZdddZddd	Zdd
dZdddZdddZdddZ	dddZ
dS )Nodevaluer   strreturnNonec                 C  s
   || _ d S Nr   selfr    r   R/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/packaging/_parser.py__init__   s   
zNode.__init__c                 C     | 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 r   )NotImplementedErrorr   r   r   r   	serialize   s   zNode.serializec                 C  r   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statec                 C  s   t |tr| | d S t |tr-t|dkr-|\}}t |tr-d|v r-| |d  d S t |tr?d|v r?| |d  d S td| jj d|)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   r   r   r   r   r   )r   r#   r   r   )r(   r#   r   r   )r   
__module____qualname__	__slots__r   r   r   r!   r"   r'   r.   r   r   r   r   r      s    





r   c                   @     e Zd ZdZdddZdS )Variabler   r   r   c                 C     t | S r   r   r   r   r   r   r!   >      zVariable.serializeNr/   r   r0   r1   r2   r!   r   r   r   r   r4   ;       r4   c                   @  r3   )Valuer   r   r   c                 C  s   d|  dS )N"r   r   r   r   r   r!   E   s   zValue.serializeNr/   r8   r   r   r   r   r:   B   r9   r:   c                   @  r3   )Opr   r   r   c                 C  r5   r   r6   r   r   r   r   r!   L   r7   zOp.serializeNr/   r8   r   r   r   r   r<   I   r9   r<   )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   r0   r1   __annotations__r   r   r   r   rA   W   s   
 rA   sourcer   r   c                 C     t t| tdS N)rules)_parse_requirementr   r
   rI   r   r   r   parse_requirementb      rO   	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_detailsrA   )rQ   Z
name_tokenrB   rE   rC   rF   rG   r   r   r   rM   f   s   


rM   "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ATrR   URLzURL after @rT   rV   Tpeekzwhitespace after URLz$semicolon (after URL and whitespace))
span_startrU   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))checkreadrW   positionrX   rY   _parse_requirement_marker_parse_specifier)rQ   rF   rC   rG   Z	url_startZspecifier_startr   r   r   r[   {   s>   







r[   rb   intrU   c                C  s@   |  ds| jd| d|dd |   t| }| d |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz	Expected z or endNrb   span_endrR   )rc   raise_syntax_errorrd   _parse_markerrW   )rQ   rb   rU   rG   r   r   r   rf      s   


rf   rD   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_BRACKETTr`   ZRIGHT_BRACKETrE   ZaroundrR   N)rc   enclosing_tokensrW   _parse_extras_list)rQ   rE   r   r   r   rZ      s   

		rZ   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)*
    rS   TrR   r`   z"Expected comma between extra namesCOMMAzextra name after commarT   )rc   appendrd   rY   rW   rl   rX   )rQ   rE   Zextra_tokenr   r   r   rp      s    



rp   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_PARENTHESISzversion specifierrn   rR   N)ro   rW   _parse_version_many)rQ   parsed_specifiersr   r   r   rg      s   

		rg   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)*)?
    r]   Z	SPECIFIERZVERSION_PREFIX_TRAILTr`   z6.* suffix can only be used with `==` or `!=` operatorsr	   rj   ZVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrR   rq   )rc   re   rd   rY   rl   rW   )rQ   rv   rb   r   r   r   ru     s0   




ru   c                 C  rJ   rK   )_parse_full_markerr   r
   rN   r   r   r   parse_marker$  rP   rx   c                 C  s   t | }| jddd |S )NrV   zend of marker expressionrT   )rm   rX   )rQ   retvalr   r   r   rw   (  s   rw   c                 C  sB   t | g}| dr|  }t | }||j|f | ds
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    BOOLOP)_parse_marker_atomrc   rd   extendrY   )rQ   Z
expressiontokenZ
expr_rightr   r   r   rm   .  s   


rm   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?
    rR   rs   Tr`   rt   zmarker expressionrn   N)rW   rc   ro   rm   _parse_marker_item)rQ   rG   r   r   r   r{   :  s   

	
r{   
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?
    rR   )rW   _parse_marker_var_parse_marker_op)rQ   Zmarker_var_leftZ	marker_opZmarker_var_rightr   r   r   r~   P  s   




r~   	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.r-   ZQUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rc   process_env_varrd   rY   replaceprocess_python_strrl   rQ   r   r   r   r   ^  s   


r   env_varc                 C  s   | dv rt dS t | S )N)platform_python_implementationpython_implementationr   )r4   )r   r   r   r   r   l  s   r   
python_strc                 C  s   t | }tt|S r   )astliteral_evalr:   r   )r   r   r   r   r   r   s  s   
r   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NOTrR   zwhitespace after 'not'rT   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rc   rd   r<   rX   rY   rl   r   r   r   r   r   x  s   


r   )rI   r   r   rA   )rQ   r   r   rA   )rQ   r   r   r\   )rQ   r   rb   rh   rU   r   r   r@   )rQ   r   r   rD   )rQ   r   r   r   )rI   r   r   r@   )rQ   r   r   r@   )rQ   r   r   r?   )rQ   r   r   r   )rQ   r   r   r   )r   r   r   r4   )r   r   r   r:   )rQ   r   r   r<   ))__doc__
__future__r   r   typingr   r   r   r   r   r   Z
_tokenizerr
   r   r   r4   r:   r<   ZMarkerLogicalr   r   r?   r@   rA   rO   rM   r[   rf   rZ   rp   rg   ru   rx   rw   rm   r{   r~   r   r   r   r   r   r   r   r   <module>   s@     ,



5




 






