o
    Ee'                     @   s  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 dZG dd	 d	eZG d
d deZG dd deZeeef Zeeeef ZeZee ZG dd deZdedefddZdedefddZdedeeeee f fddZdedededefddZdedee fddZdedee fdd Zdedefd!d"Zdedefd#d$Zdedefd%d&Zdedefd'd(Z dedefd)d*Z!dedefd+d,Z"dedefd-d.Z#d/edefd0d1Z$d2edefd3d4Z%dedefd5d6Z&dS )7zHandwritten 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                   @   sH   e Zd ZdeddfddZdefddZdefdd	Zdefd
dZdS )NodevaluereturnNc                 C   s
   || _ d S Nr   )selfr    r   e/var/www/bmteknikk.ddns.net/venv/lib/python3.10/site-packages/setuptools/_vendor/packaging/_parser.py__init__   s   
zNode.__init__c                 C   s   | j S r   r   r   r   r   r   __str__   s   zNode.__str__c                 C   s   d| j j d|  dS )N<z('z')>)	__class____name__r   r   r   r   __repr__   s   zNode.__repr__c                 C   s   t r   )NotImplementedErrorr   r   r   r   	serialize   s   zNode.serialize)r   
__module____qualname__strr   r   r   r   r   r   r   r   r      s
    r   c                   @      e Zd ZdefddZdS )Variabler   c                 C      t | S r   r   r   r   r   r   r         zVariable.serializeNr   r   r   r   r   r   r   r   r   r           r    c                   @   r   )Valuer   c                 C   s   d|  dS )N"r   r   r   r   r   r   !   s   zValue.serializeNr$   r   r   r   r   r&       r%   r&   c                   @   r   )Opr   c                 C   r!   r   r"   r   r   r   r   r   &   r#   zOp.serializeNr$   r   r   r   r   r(   %   r%   r(   c                   @   s>   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   r   r)   4   s   
 r)   sourcer   c                 C      t t| tdS N)rules)_parse_requirementr
   r	   r1   r   r   r   parse_requirement?      r7   	tokenizerc                 C   sf   |  d | jddd}|j}|  d t| }|  d t| \}}}| jd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)   )r9   
name_tokenr*   r,   r+   r-   r.   r   r   r   r5   C   s   


r5   c                 C   s   d}d}d}|  drF|   | d | j}| jdddj}| j dd	d
r+|||fS | jddd | j dd	d
r>|||fS t| |dd}n#| j}t| }| d | j dd	d
r^|||fS t| ||redndd}|||fS )z~
    requirement_details = AT URL (WS requirement_marker?)?
                        | specifier WS? (requirement_marker)?
     NATr:   URLzURL after @r<   r>   Tpeekzwhitespace after URLzURL and whitespace)
span_startafterversion specifierz#name and no valid version specifier)checkreadr?   positionr@   rA   _parse_requirement_marker_parse_specifier)r9   r-   r+   r.   	url_startspecifier_startr   r   r   rC   X   s:   







rC   rJ   rK   c                C   s>   |  ds| jd| d|d |   t| }| d |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz!Expected end or semicolon (after ))rJ   r:   )rM   raise_syntax_errorrN   _parse_markerr?   )r9   rJ   rK   r.   r   r   r   rP      s   


rP   c                 C   sd   | j ddds	g S | jdddd | d t| }| d W d   |S 1 s+w   Y  |S )	zG
    extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
    LEFT_BRACKETTrH   RIGHT_BRACKETr,   aroundr:   N)rM   enclosing_tokensr?   _parse_extras_list)r9   r,   r   r   r   rB      s   

		rB   c                 C   s   g }|  ds	|S ||  j 	 | d | j dddr$| d n|  ds,	 |S |   | d | jddd}||j q)	z>
    extras_list = identifier (wsp* ',' wsp* identifier)*
    r;   Tr:   rH   z"Expected comma between extra namesCOMMAzextra name after commar<   )rM   appendrN   rA   r?   rV   r@   )r9   r,   extra_tokenr   r   r   r]      s    



r]   c                 C   sR   | j dddd | d t| }| d W d   |S 1 s"w   Y  |S )zr
    specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
              | WS? version_many WS?
    LEFT_PARENTHESISRIGHT_PARENTHESISrL   rZ   r:   N)r\   r?   _parse_version_many)r9   parsed_specifiersr   r   r   rQ      s   

		rQ   c                 C   s   d}|  drQ| j}||  j7 }| j dddr#| jd|| jd d | j d	ddr3| jd
|| jd | d |  ds@	 |S ||  j7 }| d |  ds|S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    rE   	SPECIFIERVERSION_PREFIX_TRAILTrH   z6.* suffix can only be used with `==` or `!=` operatorsr   )rJ   span_endVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsr:   r^   )rM   rO   rN   rA   rV   r?   )r9   rd   rJ   r   r   r   rc      s0   




rc   c                 C   r2   r3   )rW   r
   r	   r6   r   r   r   parse_marker   r8   ri   c                 C   sB   t | g}| dr|  }t | }||j|f | ds
|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    BOOLOP)_parse_marker_atomrM   rN   extendrA   )r9   
expressiontoken
expr_rightr   r   r   rW     s   


rW   c                 C   s|   |  d | jdddr3| jdddd |  d t| }|  d W d   n1 s-w   Y  nt| }|  d |S )	zw
    marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
                | WS? marker_item WS?
    r:   ra   TrH   rb   zmarker expressionrZ   N)r?   rM   r\   rW   _parse_marker_item)r9   r.   r   r   r   rk     s   

	
rk   c                 C   sJ   |  d t| }|  d t| }|  d t| }|  d |||fS )zG
    marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
    r:   )r?   _parse_marker_var_parse_marker_op)r9   marker_var_left	marker_opmarker_var_rightr   r   r   rp   $  s   




rp   c                 C   sH   |  drt|  jddS |  drt|  jS | jdd dS )z/
    marker_var = VARIABLE | QUOTED_STRING
    VARIABLE._QUOTED_STRINGz+Expected a marker variable or quoted string)messageN)rM   process_env_varrN   rA   replaceprocess_python_strrV   r9   r   r   r   rq   2  s   


rq   env_varc                 C   s    | dks| dkrt dS t | S )Nplatform_python_implementationpython_implementation)r    )r   r   r   r   r{   @  s   r{   
python_strc                 C   s   t | }tt|S r   )astliteral_evalr&   r   )r   r   r   r   r   r}   J  s   
r}   c                 C   sr   |  dr|   tdS |  dr(|   | jddd | jddd tdS |  d	r4t|  jS | d
S )z&
    marker_op = IN | NOT IN | OP
    INinNOTr:   zwhitespace after 'not'r<   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)rM   rN   r(   r@   rA   rV   r~   r   r   r   rr   O  s   


rr   )'__doc__r   typingr   r   r   r   r   r   
_tokenizerr	   r
   r   r    r&   r(   	MarkerVar
MarkerItem
MarkerAtomr0   r)   r   r7   r5   rC   intrP   rB   r]   rQ   rc   ri   rW   rk   rp   rq   r{   r}   rr   r   r   r   r   <module>   sR     
3
 
