
    wi)                       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      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d%dZd&dZ	 	 	 	 d'dZ	 	 	 	 	 	 	 	 d(dZd)dZd)dZd*dZd*dZd+dZ d,dZ!d,dZ"d-dZ#d.d Z$d/d!Z%d0d"Z&d1d#Z'd2d$Z(y)3zHandwritten 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                  0    e Zd ZdZddZddZddZddZy)	Nodevaluec                    || _         y Nr   )selfr   s     P/var/www/feuerwehr-webapp/venv/lib/python3.12/site-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                P    d| j                   j                   d| j                  dS )N<(z)>)	__class____name__r   r   s    r   __repr__zNode.__repr__   s&    4>>**+1TZZN"==r   c                    t         r   )NotImplementedErrorr   s    r   	serializezNode.serialize   s    !!r   N)r   strreturnNoner$   r#   )r   
__module____qualname__	__slots__r   r   r   r"    r   r   r   r      s    I>"r   r   c                      e Zd ZdZddZy)Variabler*   c                    t        |       S r   r#   r   s    r   r"   zVariable.serialize"       4yr   Nr&   r   r'   r(   r)   r"   r*   r   r   r,   r,          Ir   r,   c                      e Zd ZdZddZy)Valuer*   c                    d|  dS )N"r*   r   s    r   r"   zValue.serialize)   s    4&{r   Nr&   r0   r*   r   r   r3   r3   &   s    Ir   r3   c                      e Zd ZdZddZy)Opr*   c                    t        |       S r   r.   r   s    r   r"   zOp.serialize0   r/   r   Nr&   r0   r*   r   r   r7   r7   -   r1   r   r7   )andor
MarkerAtom
MarkerListc                  @    e Zd ZU ded<   ded<   ded<   ded<   ded<   y	)
ParsedRequirementr#   nameurl	list[str]extras	specifierzMarkerList | NonemarkerN)r   r'   r(   __annotations__r*   r   r   r>   r>   ;   s    
I	HNr   r>   c                6    t        t        | t                    S N)rules)_parse_requirementr   r   sources    r   parse_requirementrL   F       imDEEr   c                   | 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_detailsr>   )	tokenizer
name_tokenr?   rB   r@   rC   rD   s          r   rI   rI   J   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ATrO   URLzURL after @rQ   rS   Tpeekzwhitespace after URLz$semicolon (after URL and whitespace))
span_startrR   zEcomma (within version specifier), semicolon (after version specifier)z0semicolon (after name with no version specifier))checkreadrT   positionrU   rV   _parse_requirement_marker_parse_specifier)rY   rC   r@   rD   	url_startspecifier_starts         r   rX   rX   _   s/    I
CFt$&&	u}=BB??5t?,F++(>? ??5t?,F++* ;
 $,,$Y/	$??5t?,F++*&  XG
 F##r   c                   | j                  d      s| j                  d| d|d       | j                          t        |       }| j	                  d       |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz	Expected z or endNra   span_endrO   )rb   raise_syntax_errorrc   _parse_markerrT   )rY   ra   rR   rD   s       r   re   re      s^     ??;'$$z)! 	% 	

 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_BRACKETTr_   RIGHT_BRACKETrB   aroundrO   N)rb   enclosing_tokensrT   _parse_extras_list)rY   rB   s     r   rW   rW      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)*
    rP   TrO   r_   z"Expected comma between extra namesCOMMAzextra name after commarQ   )rb   appendrc   rV   rT   rm   rU   )rY   rB   extra_tokens      r   ru   ru      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_PARENTHESISzversion specifierrr   rO   N)rt   rT   _parse_version_many)rY   parsed_specifierss     r   rf   rf      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)*)?
    r\   	SPECIFIERVERSION_PREFIX_TRAILTr_   z6.* suffix can only be used with `==` or `!=` operatorsr
   rk   VERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrO   rw   )rb   rd   rc   rV   rm   rT   )rY   r~   ra   s      r   r}   r}      s    
//+
&''
Y^^-222??1?=((H%"++a/ ) 
 ??6T?B((R%"++ ) 
 	$w'  	Y^^-222$' //+
&* r   c                6    t        t        | t                    S rG   )_parse_full_markerr   r   rJ   s    r   parse_markerr     rM   r   c                B    t        |       }| j                  dd       |S )NrS   zend of marker expressionrQ   )rn   rU   )rY   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_atomrb   rc   extendrV   )rY   
expressiontoken
expr_rights       r   rn   rn     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?
    rO   r{   Tr_   r|   zmarker expressionrr   N)rT   rb   rt   rn   _parse_marker_item)rY   rD   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?
    rO   )rT   _parse_marker_var_parse_marker_op)rY   marker_var_left	marker_opmarker_var_rights       r   r   r   4  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)rb   process_env_varrc   rV   replaceprocess_python_strrm   rY   s    r   r   r   B  so     z"y~~/44<<S#FGG		)!).."2"7"788$$A 	% 	
r   c                6    | dv rt        d      S t        |       S )N)platform_python_implementationpython_implementationr   )r,   )env_vars    r   r   r   P  s"    MM899  r   c                T    t        j                  |       }t        t        |            S r   )astliteral_evalr3   r#   )
python_strr   s     r   r   r   W  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NOTrO   zwhitespace after 'not'rQ   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rb   rc   r7   rU   rV   rm   r   s    r   r   r   \  s     t$x		(@A(:;(|		).."''((++X
 	
r   )rK   r#   r$   r>   )rY   r   r$   r>   )rY   r   r$   z"tuple[str, str, MarkerList | None])rY   r   ra   intrR   r#   r$   r<   )rY   r   r$   rA   )rY   r   r$   r#   )rK   r#   r$   r<   )rY   r   r$   r<   )rY   r   r$   r;   )rY   r   r$   
MarkerItem)rY   r   r$   	MarkerVar)r   r#   r$   r,   )r   r#   r$   r3   )rY   r   r$   r7   ))__doc__
__future__r   r   typingr   r   r   r   r   r	   
_tokenizerr   r   r   r,   r3   r7   MarkerLogicalr   r   r;   r<   r>   rL   rI   rX   re   rW   ru   rf   r}   r   r   rn   r   r   r   r   r   r   r*   r   r   <module>r      s4   # 
 D D 0" " t D   $(E/"	9b)+,
:x556
%j-?@A

 FC*2$2$'2$j),8;*&6"@F	,:
!

r   