
    
_d'                        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&y)'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                   @    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y)NodevaluereturnNc                     || _         y Nr   )selfr   s     F/usr/lib/python3/dist-packages/setuptools/_vendor/packaging/_parser.py__init__zNode.__init__   s	    
    c                     | j                   S r   r   r   s    r   __str__zNode.__str__   s    zzr   c                 <    d| j                   j                   d|  dS )N<z('z')>)	__class____name__r   s    r   __repr__zNode.__repr__   s"    4>>**+2dV377r   c                     t         r   )NotImplementedErrorr   s    r   	serializezNode.serialize   s    !!r   )r   
__module____qualname__strr   r   r   r!    r   r   r   r      s9    c d  8# 8"3 "r   r   c                       e Zd ZdefdZy)Variabler   c                     t        |       S r   r$   r   s    r   r!   zVariable.serialize       4y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y)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y)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                   L    e Zd ZU eed<   eed<   ee   ed<   eed<   ee   ed<   y)ParsedRequirementnameurlextras	specifiermarkerN)r   r"   r#   r$   __annotations__r   r   
MarkerListr%   r   r   r5   r5   4   s&    
I	HINZ  r   r5   sourcer   c                 6    t        t        | t                    S N)rules)_parse_requirementr   r
   r=   s    r   parse_requirementrC   ?   s    imDEEr   	tokenizerc                    | j                  d       | j                  dd      }|j                  }| j                  d       t        |       }| j                  d       t	        |       \  }}}| j                  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CFU%BCT3	6BBr   c                    d}d}d}| j                  d      r| j                          | j                  d       | j                  }| j	                  dd      j
                  }| j                  dd	
      r|||fS | j	                  dd       | j                  dd	
      r|||fS t        | |d      }nR| j                  }t        |       }| j                  d       | j                  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after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B??5t?,F++(>? ??5t?,F++*)3G
 $,,$Y/	$??5t?,F++*&  $:
 F##r   rW   rX   c                    | j                  d      s| j                  d| d|       | j                          t        |       }| j	                  d       |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz!Expected end or semicolon (after ))rW   rF   )rZ   raise_syntax_errorr[   _parse_markerrK   )rD   rW   rX   r:   s       r   r]   r]      s[     ??;'$$/wa8! 	% 	
 NN9%FdMr   c                     | j                  dd      sg S | j                  ddd      5  | j                  d       t        |       }| j                  d       ddd       |S # 1 sw Y   S xY w)	zG
    extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
    LEFT_BRACKETTrU   RIGHT_BRACKETr8   aroundrF   N)rZ   enclosing_tokensrK   _parse_extras_list)rD   r8   s     r   rN   rN      s{     ??>?5			#	# 
$ 
  
 	$#I.$  M  Ms   .A""A,c                    g }| j                  d      s|S |j                  | j                         j                         	 | j	                  d       | j                  dd      r| j                  d       n| j                  d      s	 |S | j                          | j	                  d       | j                  dd      }|j                  |j                         )	z>
    extras_list = identifier (wsp* ',' wsp* identifier)*
    rG   TrF   rU   z"Expected comma between extra namesCOMMAzextra name after commarH   )rZ   appendr[   rM   rK   rd   rL   )rD   r8   extra_tokens      r   rl   rl      s     F??<(
MM).."''(
$??<d?3(()MN) M 	$&&|>V&Wk&&' r   c                     | j                  ddd      5  | j                  d       t        |       }| j                  d       ddd       |S # 1 sw Y   S xY w)zr
    specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
              | WS? version_many WS?
    LEFT_PARENTHESISRIGHT_PARENTHESISrY   ri   rF   N)rk   rK   _parse_version_many)rD   parsed_specifierss     r   r^   r^      si    
 
	#	#" 
$ 
  
 	$/	:$    s   .AAc                    d}| j                  d      r| j                  }|| j                         j                  z  }| j                  dd      r!| j	                  d|| j                  dz          | j                  d	d      r| j	                  d
|| j                         | j                  d       | j                  d      s	 |S || j                         j                  z  }| j                  d       | j                  d      r|S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    rR   	SPECIFIERVERSION_PREFIX_TRAILTrU   z6.* suffix can only be used with `==` or `!=` operatorsr	   )rW   span_endVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrF   rn   )rZ   r\   r[   rM   rd   rK   )rD   ru   rW   s      r   rt   rt      s    
//+
&''
Y^^-222??1?=((H%"++a/ ) 
 ??6T?B((R%"++ ) 
 	$w'  	Y^^-222$' //+
&* r   c                 6    t        t        | t                    S r?   )re   r   r
   rB   s    r   parse_markerr|      s    6?@@r   c                     t        |       g}| j                  d      rJ| j                         }t        |       }|j                  |j                  |f       | j                  d      rJ|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    BOOLOP)_parse_marker_atomrZ   r[   extendrM   )rD   
expressiontoken
expr_rights       r   re   re     s`     %Y/0J
//(
# '	2
5::z23 //(
# r   c                 4   | j                  d       | j                  dd      rK| j                  ddd      5  | j                  d       t        |       }| j                  d       ddd       nt	        |       }| j                  d       S # 1 sw Y   xY w)	zw
    marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
                | WS? marker_item WS?
    rF   rr   TrU   rs   zmarker expressionri   N)rK   rZ   rk   re   _parse_marker_item)rD   r:   s     r   r   r     s     d)5''& ( 
 	$
 d#!.y!9Fd#	$ 	$ $I.dM	$ 	$s   .BBc                     | j                  d       t        |       }| j                  d       t        |       }| j                  d       t        |       }| j                  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   $  si     d'	2Od +Id(3dY(899r   c                    | j                  d      r3t        | j                         j                  j	                  dd            S | j                  d      r#t        | j                         j                        S | j                  d       y)z/
    marker_var = VARIABLE | QUOTED_STRING
    VARIABLE._QUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rZ   process_env_varr[   rM   replaceprocess_python_strrd   rD   s    r   r   r   2  so     z"y~~/44<<S#FGG		)!).."2"7"788$$A 	% 	
r   env_varc                 B    | dk(  s| dk(  rt        d      S t        |       S )Nplatform_python_implementationpython_implementation)r'   )r   s    r   r   r   @  s+    33--899  r   
python_strc                 T    t        j                  |       }t        t        |            S r   )astliteral_evalr.   r$   )r   r   s     r   r   r   J  s!    Z(EUr   c                    | j                  d      r| j                          t        d      S | j                  d      rA| j                          | j                  dd       | j                  dd       t        d      S | j                  d	      r#t        | j                         j                        S | j                  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)rZ   r[   r2   rL   rM   rd   r   s    r   r   r   O  s     t$x		(@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   rl   r^   rt   r|   re   r   r   r   r   r   r   r%   r   r   <module>r      s    @ @ 0" "t 
D 
 
 (E/"	9b)+,

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