
    {c$                     H   d 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          Z G d d	e          Z G d
 de          Z G d de          Zeeef         Zeeeef         ZeZee         Z G d de          ZdedefdZdedefdZdedeeeee         f         fdZdedededefdZdedee         fdZdedee         fdZdedefdZdedefdZdedefdZdedefdZ dedefdZ!dedefd Z"dedefd!Z#d"edefd#Z$d$edefd%Z%dedefd&Z&dS )'zHandwritten parser of dependency specifiers.

The docstring for each __parse_* function contains ENBF-inspired grammar representing
the implementation.
    N)AnyList
NamedTupleOptionalTupleUnion   )DEFAULT_RULES	Tokenizerc                   B    e Zd ZdeddfdZdefdZdefdZdefdZdS )NodevaluereturnNc                     || _         d S Nr   )selfr   s     3/usr/lib/python3/dist-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                 (    d| j         j         d|  dS )N<z('z')>)	__class____name__r   s    r   __repr__zNode.__repr__   s     74>*77d7777r   c                     t           r   )NotImplementedErrorr   s    r   	serializezNode.serialize   s    !!r   )r   
__module____qualname__strr   r   r   r!    r   r   r   r      s        c d        8# 8 8 8 8"3 " " " " " "r   r   c                       e Zd ZdefdZdS )Variabler   c                      t          |           S r   r$   r   s    r   r!   zVariable.serialize       4yyr   Nr   r"   r#   r$   r!   r%   r   r   r'   r'      /        3      r   r'   c                       e Zd ZdefdZdS )Valuer   c                     d|  dS )N"r%   r   s    r   r!   zValue.serialize!   s    4{{{r   Nr+   r%   r   r   r.   r.       s/        3      r   r.   c                       e Zd ZdefdZdS )Opr   c                      t          |           S r   r)   r   s    r   r!   zOp.serialize&   r*   r   Nr+   r%   r   r   r2   r2   %   r,   r   r2   c                   Z    e Zd ZU eed<   eed<   ee         ed<   eed<   ee         ed<   dS )ParsedRequirementnameurlextras	specifiermarkerN)r   r"   r#   r$   __annotations__r   r   
MarkerListr%   r   r   r5   r5   4   sN         
III	HHHINNNZ      r   r5   sourcer   c                 H    t          t          | t                              S N)rules)_parse_requirementr   r
   r=   s    r   parse_requirementrC   ?   s    imDDDEEEr   	tokenizerc                 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_detailsr5   )rD   
name_tokenr6   r8   r7   r9   r:   s          r   rA   rA   C   s     d!!R "  J ?Dd9%%Fd7	BBCFU%BCCCT3	6BBBr   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ATrF   URLzURL after @rH   rJ   Tpeekzwhitespace after URLzURL and whitespace)
span_startafterzversion specifierz#name and no valid version specifier)checkreadrK   positionrL   rM   _parse_requirement_marker_parse_specifier)rD   r9   r7   r:   	url_startspecifier_starts         r   rO   rO   X   s~    I
CFt "
$&	u}==B??5t?,, 	,F++(>??? ??5t?,, 	,F++*)3G
 
 
 $,$Y//	$??5t?,, 	,F++*& ;##:
 
 
 F##r   rW   rX   c                    |                      d          s|                     d| d|           |                                  t          |           }|                     d           |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz!Expected end or semicolon (after ))rW   rF   )rY   raise_syntax_errorrZ   _parse_markerrK   )rD   rW   rX   r:   s       r   r\   r\      s~     ??;'' 
$$8888! 	% 	
 	
 	
 NN9%%FdMr   c                    |                      dd          sg S |                     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_BRACKETTrU   RIGHT_BRACKETrF   N)rY   enclosing_tokensrK   _parse_extras_list)rD   r8   s     r   rN   rN      s     ??>?55 			#	#NO	D	D    $#I..$                             
 Ms   :A66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)*
    rG   TrF   rU   z"Expected comma between extra namesCOMMAzextra name after commarH   )rY   appendrZ   rM   rK   rc   rL   )rD   r8   extra_tokens      r   ri   ri      s     F??<(( 
MM)..""'(((($??<d?33 	(()MNNNN)) 	$&&|>V&WWk&'''( Mr   c                     |                      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_PARENTHESISrF   N)rh   rK   _parse_version_manyrD   parsed_specifierss     r   r]   r]      s    
 
	#	#$68K	L	L    $/	::$                             
 s   :AA!$A!c                 N   d}|                      d          r||                                 j        z  }|                     d           |                      d          snF||                                 j        z  }|                     d           |                      d          |S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    rR   	SPECIFIERrF   rk   )rY   rZ   rM   rK   rr   s     r   rq   rq      s     
//+
&
&  Y^^--22$w'' 	Y^^--22$ //+
&
&   r   c                 H    t          t          | t                              S r?   )rd   r   r
   rB   s    r   parse_markerrw      s    6???@@@r   c                     t          |           g}|                     d          rT|                                 }t          |           }|                    |j        |f           |                     d          T|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    BOOLOP)_parse_marker_atomrY   rZ   extendrM   )rD   
expressiontoken
expr_rights       r   rd   rd      s}     %Y//0J
//(
#
# 4  '	22
5:z2333 //(
#
# 4 r   c                 v   |                      d           |                     dd          rh|                     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?
    rF   ro   TrU   rp   N)rK   rY   rh   rd   _parse_marker_item)rD   r:   s     r   rz   rz      s     d)55 /''(:<OPP 	$ 	$d###!.y!9!9Fd###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 $I..dMs   :B		BBc                    |                      d           t          |           }|                      d           t          |           }|                      d           t          |           }|                      d           |||fS )zG
    marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
    rF   )rK   _parse_marker_var_parse_marker_op)rD   marker_var_left	marker_opmarker_var_rights       r   r   r     s     d'	22Od ++Id(33dY(899r   c                 F   |                      d          r:t          |                                 j                            dd                    S |                      d          r&t          |                                 j                  S |                     d           dS )z/
    marker_var = VARIABLE | QUOTED_STRING
    VARIABLE._QUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rY   process_env_varrZ   rM   replaceprocess_python_strrc   rD   s    r   r   r     s     z"" 
y~~//4<<S#FFGGG		)	) 
!).."2"2"7888$$A 	% 	
 	
 	
 	
 	
r   env_varc                 V    | dk    s| dk    rt          d          S t          |           S )Nplatform_python_implementationpython_implementation)r'   )r   s    r   r   r   '  s7    333---8999   r   
python_strc                 b    t          j        |           }t          t          |                    S r   )astliteral_evalr.   r$   )r   r   s     r   r   r   1  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NOTrF   zwhitespace after 'not'rH   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rY   rZ   r2   rL   rM   rc   r   s    r   r   r   6  s     t 
$xx			 
(@AAA(:;;;(||			 
)..""'(((++8
 
 	
r   )'__doc__r   typingr   r   r   r   r   r   
_tokenizerr
   r   r   r'   r.   r2   	MarkerVar
MarkerItem
MarkerAtomr<   r5   r$   rC   rA   rO   intr\   rN   ri   r]   rq   rw   rd   rz   r   r   r   r   r   r%   r   r   <module>r      s    


 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 0 0 0 0 0 0 0 0" " " " " " " "    t   
    D   
       
 (E/"	9b)+,

 
#Y
! ! ! ! !
 ! ! !Fc F&7 F F F FC) C0A C C C C*0$0$
3Xj))*0$ 0$ 0$ 0$f),58   (Y 49    ) S	    6
	 
c 
 
 
 
9     &A A A A A A	Y 	: 	 	 	 	) 
    $:) :
 : : : :
 
y 
 
 
 
!S !X ! ! ! !3 5    

	 
b 
 
 
 
 
 
r   