U
    ]                     @   s  d dl mZmZmZ d dlZd dlZd dlmZmZm	Z	m
Z
 d dlmZmZmZmZmZ d dlmZ d dlmZ ddlmZ dd	lmZmZ dd
lmZmZmZ erd dl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Z0e/Z1eddZ2e,e2 Z3e1ee*e1  Z4e&ee4 e' dZ5eej6ej7ej8B Z9eej6ej7ej8B Z:e9e:A Z;ee;ee*e;  ddddZ<ee(e< e) e<B Z=e=>dd  e	e=dZ?e?>d d  e	e d!Ze>d"d  e+Z@e@e ZAe?eeA ZBe3eeA ZCe0ee5 eCeBB  ZDeeD e ZEeEFd# G d$d% d%eGZHdS )&    )absolute_importdivisionprint_functionN)stringStart	stringEndoriginalTextForParseException)
ZeroOrMoreWordOptionalRegexCombine)Literal)parse   )MYPY_CHECK_RUNNING)MARKER_EXPRMarker)LegacySpecifier	SpecifierSpecifierSet)Listc                   @   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>;       r/   	specifierc                 C   s   |d S )Nr   r   r+   r   r   r   r/   >   r0   markerc                 C   s   t | |j|j S )N)r   Z_original_startZ_original_endr+   r   r   r   r/   B   r0   zx[]c                   @   s(   e Zd ZdZdd Zdd Z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.
    c              
   C   s  zt |}W nD tk
rR } z&td||j|jd  |jW 5 d }~X Y nX |j| _|jrt		|j}|j
dkrt	||jkrtdn(|j
r|jr|j
s|jstd|j|j| _nd | _t|jr|j ng | _t|j| _|jr|jnd | _d S )NzParse error at "{0!r}": {1}   filezInvalid URL givenzInvalid URL: {0})REQUIREMENTparseStringr   r   formatZlocmsgr&   r'   urlparseZschemeZ
urlunparseZnetlocsetr(   ZasListr   r1   r2   )selfZrequirement_stringZreqeZ
parsed_urlr   r   r   __init___   s4     


zRequirement.__init__c                 C   s   | j g}| jr*|ddt| j | jr@|t| j | jrh|d| j | j	rh|d | j	r|d| j	 d|S )Nz[{0}]r#   z@ {0} z; {0}r*   )
r&   r(   appendr8   joinsortedr1   strr'   r2   )r<   partsr   r   r   __str__{   s    
zRequirement.__str__c                 C   s   d t| S )Nz<Requirement({0!r})>)r8   rC   )r<   r   r   r   __repr__   s    zRequirement.__repr__N)r   r   r   r   r>   rE   rF   r   r   r   r   r3   R   s   r3   )IZ
__future__r   r   r   stringreZ	pyparsingr   r   r   r   r	   r
   r   r   r   r   LZsix.moves.urllibr   r:   Z_typingr   Zmarkersr   r   Z
specifiersr   r   r   typingr   
ValueErrorr   Zascii_lettersZ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_REQUIREMENTr6   r7   objectr3   r   r   r   r   <module>   sn     
