
    j_1                       d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
mZmZmZ  G d d	          Z G d
 de          Z G d de          Z G 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e          Zd4dZd5dZd6dZd7d!Zd8d#Zd8d$Zd9d%Z d9d&Z!d:d'Z"d;d(Z#d;d)Z$d<d*Z%d=d,Z&d>d.Z'd?d0Z(d@d2Z)dAd3Z*dS )BzHandwritten parser of dependency specifiers.

The docstring for each __parse_* function contains EBNF-inspired grammar representing
the implementation.
    )annotationsN)Sequence)Literal
NamedTupleUnion   )DEFAULT_RULESParserSyntaxError	Tokenizerc                  J    e Zd ZdZddZddZddZdd	Zdd
ZddZ	ddZ
dS )Nodevaluer   strreturnNonec                    || _         d S Nr   selfr   s     P/var/www/html/python-test/venv/lib/python3.11/site-packages/packaging/_parser.py__init__zNode.__init__   s    


    c                    | j         S r   r   r   s    r   __str__zNode.__str__   s
    zr   c                2    d| j         j         d| j        dS )N<(z)>)	__class____name__r   r   s    r   __repr__zNode.__repr__   s"    =4>*==TZ====r   c                    t           r   )NotImplementedErrorr   s    r   	serializezNode.serialize   s    !!r   c                    | j         S r   r   r   s    r   __getstate__zNode.__getstate__   s
    zr   objectc                |    t          |t                    st          d| j        j         d|          || _        d S )NCannot restore z value from )
isinstancer   	TypeErrorr    r!   r   r   s     r   _restore_valuezNode._restore_value#   sK    %%% 	P$."9PPuPP   


r   statec                   t          |t                    r|                     |           d S t          |t                    rNt	          |          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.   _	slot_dicts       r   __setstate__zNode.__setstate__*   s    eS!! 	&&&FeU## 	E

a LAy)T** w)/C/C##Ig$6777eT"" 	w%'7'7g///FR$.*ARRRRSSSr   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-   r6    r   r   r   r      s        I      > > > >" " " "      T T T T T Tr   r   c                      e Zd ZdZddZdS )Variabler;   r   r   c                     t          |           S r   r   r   s    r   r%   zVariable.serialize?       4yyr   Nr7   r!   r8   r9   r:   r%   r;   r   r   r=   r=   <   -        I     r   r=   c                      e Zd ZdZddZdS )Valuer;   r   r   c                f    t          |           }d|vrd| dS d|vrd| dS t          d          )N"'z>Cannot serialize marker value containing both quote characters)r   
ValueErrorr   s     r   r%   zValue.serializeF   sT    D		eu<<<eu<<<L
 
 	
r   Nr7   rA   r;   r   r   rD   rD   C   s-        I
 
 
 
 
 
r   rD   c                      e Zd ZdZddZdS )Opr;   r   r   c                     t          |           S r   r?   r   s    r   r%   zOp.serializeT   r@   r   Nr7   rA   r;   r   r   rJ   rJ   Q   rB   r   rJ   )andor
MarkerAtom
MarkerListc                  B    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!   r8   r9   __annotations__r;   r   r   rQ   rQ   _   sE         IIIHHHNNNr   rQ   sourcer   r   c                H    t          t          | t                              S N)rules)_parse_requirementr   r	   rY   s    r   parse_requirementr_   j       imDDDEEEr   	tokenizerr   c                T   |                      d           |                     dd          }|j        }|                      d           t          |           }|                      d           t	          |           \  }}}|                     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_detailsrQ   )ra   
name_tokenrR   rU   rS   rV   rW   s          r   r]   r]   n   s     d!!R "  J ?Dd9%%Fd7	BBCFU%BCCCT3	6BBBr   "tuple[str, str, MarkerList | None]c                X   d}d}d}|                      d          r|                                  |                     d           | j        }|                     dd          j        }|                      dd	
          r|||fS |                     dd           |                      dd	
          r|||fS t          | |d          }n]| j        }t          |           }|                     d           |                      dd	
          r|||fS t          | ||rdnd          }|||fS )z~
    requirement_details = AT URL (WS requirement_marker?)?
                        | specifier WS? (requirement_marker)?
     NATrc   URLzURL after @re   rg   Tpeekzwhitespace after URLz$semicolon (after URL and whitespace))
span_startrf   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))checkreadrh   positionri   rj   _parse_requirement_marker_parse_specifier)ra   rV   rS   rW   	url_startspecifier_starts         r   rl   rl      s    I
CFt $
$&	u}==B??5t?,, 	,F++(>??? ??5t?,, 	,F++* ;
 
 
 $,$Y//	$??5t?,, 	,F++*& HWWG
 
 
 F##r   ru   intrf   c                   |                      d          s|                     d| d|d           |                                  t          |           }|                     d           |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz	Expected z or endNru   span_endrc   )rv   raise_syntax_errorrw   _parse_markerrh   )ra   ru   rf   rW   s       r   ry   ry      s     ??;'' 
$$))))! 	% 	
 	
 	

 NN9%%FdMr   rT   c                
   |                      dd          sg S |                     ddd          5  |                     d           t          |           }|                     d           ddd           n# 1 swxY w Y   |S )	zG
    extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
    LEFT_BRACKETTrs   RIGHT_BRACKETrU   aroundrc   N)rv   enclosing_tokensrh   _parse_extras_list)ra   rU   s     r   rk   rk      s     ??>?55 			#	# 
$ 
 
    
 	$#I..$                              Ms   :A88A<?A<c                   g }|                      d          s|S |                    |                                 j                   	 |                     d           |                      dd          r|                     d           n|                      d          sn[|                                  |                     d           |                     dd          }|                    |j                   |S )	z>
    extras_list = identifier (wsp* ',' wsp* identifier)*
    rd   Trc   rs   z"Expected comma between extra namesCOMMAzextra name after commare   )rv   appendrw   rj   rh   r   ri   )ra   rU   extra_tokens      r   r   r      s     F??<(( 
MM)..""'(((($??<d?33 	(()MNNNN)) 	$&&|>V&WWk&'''( Mr   c                    |                      ddd          5  |                     d           t          |           }|                     d           ddd           n# 1 swxY w Y   |S )zr
    specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
              | WS? version_many WS?
    LEFT_PARENTHESISRIGHT_PARENTHESISzversion specifierr   rc   N)r   rh   _parse_version_many)ra   parsed_specifierss     r   rz   rz      s    
 
	#	#" 
$ 
 
    
 	$/	::$                              s   :AA#&A#c                   d}|                      d          rE| j        }|                                 j        }||z  }|                      dd          rcd}|                    d          s*|                    d          r|                    d	          sd
}|                     ||| j        dz              |                      dd          r|                     d|| j                   |                     d           |                      d          snG||                                 j        z  }|                     d           |                      d          E|S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    rp   	SPECIFIERVERSION_PREFIX_TRAILTrs   z6.* suffix can only be used with `==` or `!=` operatorsz!=z==z===zN.* suffix cannot be used with pre-release, post-release, dev or local versionsr   r   VERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrc   r   )rv   rx   rw   rj   
startswithr   rh   )ra   r   ru   rV   messages        r   r   r     s    
//+
&
&  '
NN$$)	Y&??1?== 	NG##D)) $$T**3<3G3G3N3N,  ((%"+a/ )   
 ??6T?BB 	((R%"+ )   
 	$w'' 	Y^^--22$9 //+
&
&  < r   c                H    t          t          | t                              S r[   )_parse_full_markerr   r	   r^   s    r   parse_markerr   5  r`   r   c                R    t          |           }|                     dd           |S )Nrg   zend of marker expressionre   )r   ri   )ra   retvals     r   r   r   9  s.    9%%FU%?@@@Mr   c                    t          |           g}|                     d          rT|                                 }t          |           }|                    |j        |f           |                     d          T|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    BOOLOP)_parse_marker_atomrv   rw   extendrj   )ra   
expressiontoken
expr_rights       r   r   r   ?  s}     %Y//0J
//(
#
# 4  '	22
5:z2333 //(
#
# 4 r   c                z   |                      d           |                     dd          rj|                     ddd          5  |                      d           t          |           }|                      d           ddd           n# 1 swxY w Y   nt	          |           }|                      d           |S )	zw
    marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
                | WS? marker_item WS?
    rc   r   Trs   r   zmarker expressionr   N)rh   rv   r   r   _parse_marker_item)ra   rW   s     r   r   r   K  s
    d)55 
/''& ( 
 
 	$ 	$
 d###!.y!9!9Fd###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ $I..dMs   :BBB
MarkerItemc                   |                      d           t          |           }|                      d           t          |           }|                      d           t          |           }|                      d           |||fS )zG
    marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
    rc   )rh   _parse_marker_var_parse_marker_op)ra   marker_var_left	marker_opmarker_var_rights       r   r   r   a  s     d'	22Od ++Id(33dY(899r   	MarkerVarc           
        |                      d          r:t          |                                 j                            dd                    S |                      d          r{|                                 }	 t          |j                  S # t          t          f$ r>}t          d| j	        |j
        |j
        t          |j                  z   f          |d}~ww xY w|                     d	           dS )
z/
    marker_var = VARIABLE | QUOTED_STRING
    VARIABLE.r4   QUOTED_STRINGzInvalid quoted string)rY   spanNz+Expected a marker variable or quoted string)r   )rv   process_env_varrw   rj   replaceprocess_python_strSyntaxErrorrH   r
   rY   rx   r2   r   )ra   r   excs      r   r   r   o  s	    z"" 
y~~//4<<S#FFGGG		)	) 
  	%ej111Z( 	 	 	#' 'nens5:&FG   		 	$$A 	% 	
 	
 	
 	
 	
s   :B C9CCenv_varc                F    | dv rt          d          S t          |           S )N)platform_python_implementationpython_implementationr   )r=   )r   s    r   r   r     s+    MMM8999   r   
python_strc                b    t          j        |           }t          t          |                    S r   )astliteral_evalrD   r   )r   r   s     r   r   r     s&    Z((EUr   c                   |                      d          r#|                                  t          d          S |                      d          rQ|                                  |                     dd           |                     dd           t          d          S |                      d	          r&t          |                                 j                  S |                     d
          S )z&
    marker_op = IN | NOT IN | OP
    INinNOTrc   zwhitespace after 'not're   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rv   rw   rJ   ri   rj   r   )ra   s    r   r   r     s     t 
$xx			 

(@AAA(:;;;(||			 
)..""'(((++X
 
 	
r   )rY   r   r   rQ   )ra   r   r   rQ   )ra   r   r   rn   )ra   r   ru   r}   rf   r   r   rO   )ra   r   r   rT   )ra   r   r   r   )rY   r   r   rO   )ra   r   r   rO   )ra   r   r   rN   )ra   r   r   r   )ra   r   r   r   )r   r   r   r=   )r   r   r   rD   )ra   r   r   rJ   )+__doc__
__future__r   r   collections.abcr   typingr   r   r   
_tokenizerr	   r
   r   r   r=   rD   rJ   MarkerLogicalr   r1   r   rN   listrO   rQ   r_   r]   rl   ry   rk   r   rz   r   r   r   r   r   r   r   r   r   r   r;   r   r   <module>r      s    # " " " " " 



 $ $ $ $ $ $ - - - - - - - - - - C C C C C C C C C C)T )T )T )T )T )T )T )TX    t   
 
 
 
 
D 
 
 
        $(E/"	9b)+,
:x556
%j-?@A
    
   F F F FC C C C*2$ 2$ 2$ 2$j   *   &   6   "# # # #RF F F F   	 	 	 	   ,: : : :
 
 
 
,! ! ! !   

 
 
 
 
 
r   