o
    N&`8                     @   sf  d dl Z d dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZmZ G dd deZeejej Zed	  Z!ed
  Z"ed  Z#ed  Z$ed  Z%ed  Z&ed  Z'edZ(eee(e B Z)e
eee) Z*e*dZ+e*Z,eddZ-e'e- Z.e,ee%e,  Z/e!ee/ e" dZ0eej1e j2e j3B Z4eej1e j2e j3B Z5e4e5A Z6e
e6ee%e6  ddddZ7ee#e7 e$ e7B Z8e89dd  ee8dZ:e:9dd  ee dZe9dd  e&Z;e;e Z<e:ee< Z=e.ee< Z>e+ee0 e>e=B  Z?ee? e Z@e@Ad G dd  d ZBdS )!    N)ListOptionalSet)
CombineLiteralr   ParseExceptionRegexWord
ZeroOrMoreoriginalTextFor	stringEndstringStart   )MARKER_EXPRMarker)LegacySpecifier	SpecifierSpecifierSetc                   @   s   e Zd ZdZdS )InvalidRequirementzJ
    An invalid requirement was found, users should refer to PEP 508.
    N)__name__
__module____qualname____doc__ r   r   8/usr/lib/python3/dist-packages/packaging/requirements.pyr      s    r   [](),;@z-_.namez[^ ]+urlextrasF)Z
joinStringZadjacent	_raw_specc                 C   s
   |j pdS )N )r%   sltr   r   r   <lambda>@   s   
 r+   	specifierc                 C   s   |d S )Nr   r   r'   r   r   r   r+   C   s    markerc                 C   s   t | |j|j S )N)r   Z_original_startZ_original_endr'   r   r   r   r+   G   s    zx[]c                   @   s>   e Zd ZdZdeddfddZdefddZdefd	d
ZdS )RequirementzParse a requirement.

    Parse a given requirement string into its parts, such as name, specifier,
    URL, and extras. Raises InvalidRequirement on a badly-formed requirement
    string.
    requirement_stringreturnNc              
   C   s
  zt |}W n ty& } ztd||j|jd  d|j d }~ww |j| _|jratj	
|j}|jdkrHtj	||jkrGtdn|jrT|jrT|js\|js\td|j |j| _nd | _t|jrm|j ng | _t|j| _|jr|j| _d S d | _d S )NzParse error at "   z": filezInvalid URL givenzInvalid URL: )REQUIREMENTparseStringr   r   locmsgr"   r#   urllibparseZurlparseZschemeZ
urlunparseZnetlocsetr$   ZasListr   r,   r-   )selfr/   ZreqeZ
parsed_urlr   r   r   __init__d   s4    

zRequirement.__init__c                 C   s   | j g}| jrdt| j}|d| d | jr#|t| j | jr7|d| j  | jr7|d | jrC|d| j  d|S )Nr   r   r   z@  z; r&   )	r"   r$   joinsortedappendr,   strr#   r-   )r:   partsZformatted_extrasr   r   r   __str__}   s   

zRequirement.__str__c                 C   s   d|  dS )Nz<Requirement('z')>r   )r:   r   r   r   __repr__   s   zRequirement.__repr__)r   r   r   r   rA   r<   rC   rD   r   r   r   r   r.   W   s
    r.   )CrestringZurllib.parser7   typingr   r   Z	TOptionalr   Z	pyparsingr   r   Lr   r   r	   r
   r   r   r   Zmarkersr   r   Z
specifiersr   r   r   
ValueErrorr   Zascii_lettersdigitsZALPHANUMsuppressZLBRACKETZRBRACKETZLPARENZRPARENCOMMAZ	SEMICOLONATZPUNCTUATIONZIDENTIFIER_ENDZ
IDENTIFIERNAMEZEXTRAZURIZURLZEXTRAS_LISTZEXTRASZ
_regex_strVERBOSE
IGNORECASEZVERSION_PEP440ZVERSION_LEGACYZVERSION_ONEZVERSION_MANYZ_VERSION_SPECZsetParseActionZVERSION_SPECZMARKER_SEPARATORZMARKERZVERSION_AND_MARKERZURL_AND_MARKERZNAMED_REQUIREMENTr3   r4   r.   r   r   r   r   <module>   sb   0
