
0c@_'                 @   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 r d  d l m Z Gd d   d e   Z! e e j" e j#  Z$ e d  j%   Z& e d  j%   Z' e d  j%   Z( e d  j%   Z) e d  j%   Z* e d  j%   Z+ e d  j%   Z, e d  Z- e$ e e-  e$ BZ. e e$ e e.   Z/ e/ d  Z0 e/ Z1 e d  d  Z2 e, e2 Z3 e1 e e* e1  Z4 e& e e4  e' d  Z5 e e j6 e j7 e j8 B Z9 e e j6 e j7 e j8 B Z: e9 e: AZ; e e; e e* e;  d d d d d  Z< e e( e< e) e< B Z= e= j> d d    e	 e=  d   Z? e? j> d! d    e	 e    d"  Z e j> d# d    e+ Z@ e@ e ZA e? e eA  ZB e3 e eA  ZC e0 e e5  eC eB BZD e eD e ZE eE jF d$  Gd% d&   d& eG  ZH d S)'    )absolute_importdivisionprint_functionN)stringStart	stringEndoriginalTextForParseException)
ZeroOrMoreWordOptionalRegexCombine)Literal)parse   )TYPE_CHECKING)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   A/tmp/pip-build-jynh7p1z/pip/pip/_vendor/packaging/requirements.pyr      s   r   [](),;@z-_.namez[^ ]+urlextras
joinStringadjacentF	_raw_specc             C   s   | j  p d S)N )r+   )sltr   r   r   <lambda>;   s    r0   	specifierc             C   s   | d S)Nr   r   )r-   r.   r/   r   r   r   r0   >   s    markerc             C   s   t  |  | j | j   S)N)r   _original_start_original_end)r-   r.   r/   r   r   r   r0   B   s    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   sv  y t  j |  } WnT t k
 ri } z4 t d j | | j | j d  | j    WYd  d  } ~ Xn X| j |  _ | j rt	 j	 | j  } | j
 d k r t	 j |  | j k rt d   n? | j
 o | j s | j
 r| j rt d j | j    | j |  _ n	 d  |  _ t | j r9| j j   n g   |  _ t | j  |  _ | j ri| j n d  |  _ d  S)NzParse error at "{0!r}": {1}   filezInvalid URL givenzInvalid URL: {0})REQUIREMENTparseStringr   r   formatlocmsgr&   r'   urlparsescheme
urlunparsenetlocsetr(   asListr   r1   r2   )selfrequirement_stringreqe
parsed_urlr   r   r   __init___   s(    9		'zRequirement.__init__c             C   s   |  j  g } |  j r= | j d j d j t |  j     |  j r\ | j t |  j   |  j r | j d j |  j   |  j	 r | j d  |  j	 r | j d j |  j	   d j |  S)Nz[{0}]r#   z@ {0} z; {0}r,   )
r&   r(   appendr:   joinsortedr1   strr'   r2   )rC   partsr   r   r   __str__{   s    	(				zRequirement.__str__c             C   s   d j  t |    S)Nz<Requirement({0!r})>)r:   rM   )rC   r   r   r   __repr__   s    zRequirement.__repr__N)r   r   r   r   rH   rO   rP   r   r   r   r   r5   R   s   r5   )I
__future__r   r   r   stringreZpip._vendor.pyparsingr   r   r   r   r	   r
   r   r   r   r   LZpip._vendor.six.moves.urllibr   r=   Z_typingr   markersr   r   
specifiersr   r   r   Ztypingr   
ValueErrorr   ascii_lettersdigitsALPHANUMsuppressLBRACKETRBRACKETLPARENRPARENCOMMA	SEMICOLONATPUNCTUATIONIDENTIFIER_END
IDENTIFIERNAMEEXTRAURIURLEXTRAS_LISTEXTRAS
_regex_strVERBOSE
IGNORECASEVERSION_PEP440VERSION_LEGACYVERSION_ONEVERSION_MANY_VERSION_SPECsetParseActionVERSION_SPECZMARKER_SEPARATORMARKERVERSION_AND_MARKERURL_AND_MARKERNAMED_REQUIREMENTr8   r9   objectr5   r   r   r   r   <module>   sd   "(

 	
