
    R"fk(                        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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     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    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   ?       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   )rE   
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ATrG   URLzURL after @rI   rK   Tpeekzwhitespace after URLzURL and whitespace)
span_startafterversion specifierz#name and no valid version specifier)checkreadrL   positionrM   rN   _parse_requirement_marker_parse_specifier)rE   r9   r7   r:   	url_startspecifier_starts         r   rP   rP   X   s-    I
CFt$&&	u}=BB??5t?,F++(>? ??5t?,F++*)3G
 $,,$Y/	$??5t?,F++*&  $:
 F##r   rX   rY   c                    | j                  d      s| j                  d| d|       | j                          t        |       }| j	                  d       |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz!Expected end or semicolon (after ))rX   rG   )r[   raise_syntax_errorr\   _parse_markerrL   )rE   rX   rY   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_BRACKETTrV   RIGHT_BRACKETr8   aroundrG   N)r[   enclosing_tokensrL   _parse_extras_list)rE   r8   s     r   rO   rO      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)*
    rH   TrG   rV   z"Expected comma between extra namesCOMMAzextra name after commarI   )r[   appendr\   rN   rL   re   rM   )rE   r8   extra_tokens      r   rm   rm      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_PARENTHESISrZ   rj   rG   N)rl   rL   _parse_version_many)rE   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)*)?
    rS   	SPECIFIERVERSION_PREFIX_TRAILTrV   z6.* suffix can only be used with `==` or `!=` operatorsr	   )rX   span_endVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrG   ro   )r[   r]   r\   rN   re   rL   )rE   rv   rX   s      r   ru   ru      s    
//+
&''
Y^^-222??1?=((H%"++a/ ) 
 ??6T?B((R%"++ ) 
 	$w'  	Y^^-222$' //+
&* r   c                 6    t        t        | t                    S r?   )_parse_full_markerr   r
   rB   s    r   parse_markerr~      rD   r   c                 B    t        |       }| j                  dd       |S )NrK   zend of marker expressionrI   )rf   rM   )rE   retvals     r   r}   r}     s%    9%FU%?@Mr   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_atomr[   r\   extendrN   )rE   
expressiontoken
expr_rights       r   rf   rf     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?
    rG   rs   TrV   rt   zmarker expressionrj   N)rL   r[   rl   rf   _parse_marker_item)rE   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?
    rG   )rL   _parse_marker_var_parse_marker_op)rE   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)r[   process_env_varr\   rN   replaceprocess_python_strre   rE   s    r   r   r   8  so     z"y~~/44<<S#FGG		)!).."2"7"788$$A 	% 	
r   env_varc                 6    | dv rt        d      S t        |       S )N)platform_python_implementationpython_implementationr   )r'   )r   s    r   r   r   F  s"    MM899  r   
python_strc                 T    t        j                  |       }t        t        |            S r   )astliteral_evalr.   r$   )r   r   s     r   r   r   M  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NOTrG   zwhitespace after 'not'rI   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)r[   r\   r2   rM   rN   re   r   s    r   r   r   R  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   rP   intr^   rO   rm   r_   ru   r~   r}   rf   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  @F F F) 
 	Y 	: 	) 
 ,:) :
 :
 
y 
!S !X !3 5 

	 
b 
r   