î
@ÝôWç  ã               @   sb  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 m Z d d	 l m Z m Z 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 ƒ Z, e+ Z- e d ƒ d ƒ Z. e( e. Z/ e- e e& e- ƒ Z0 e" e e0 ƒ e# d ƒ Z1 e e j2 e j3 e j4 Bƒ Z5 e e j2 e j3 e j4 Bƒ Z6 e5 e6 AZ7 e e7 e e& e7 ƒ d d d d ƒd ƒ Z8 e e$ e8 e% e8 Bƒ Z9 e9 j: d d „  ƒ e	 e9 ƒ d ƒ Z; e; j: d d „  ƒ e	 e ƒ  ƒ d  ƒ Z e j: d! d „  ƒ e' Z< e< e Z= e; e e= ƒ Z> e/ e e= ƒ Z? e, e e1 ƒ e? e> BZ@ e e@ e ZA Gd" d# „  d# eB ƒ ZC d S)$é    )Úabsolute_importÚdivisionÚprint_functionN)ÚstringStartÚ	stringEndÚoriginalTextForÚParseException)Ú
ZeroOrMoreÚWordÚOptionalÚRegexÚCombine)ÚLiteral)Úparseé   )Ú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   úA/tmp/pip-build-sgmvqjpy/pip/pip/_vendor/packaging/requirements.pyr      s   r   ú[ú]ú(ú)ú,ú;ú@z-_.Únamez[^ ]+ÚurlÚextrasZ
joinStringZadjacentFÚ	_raw_specc             C   s   | j  p d S)NÚ )r'   )ÚsÚlÚtr   r   r   Ú<lambda>8   s    r,   Ú	specifierc             C   s   | d S)Nr   r   )r)   r*   r+   r   r   r   r,   ;   s    Úmarkerc             C   s   t  |  | j | j … ƒ S)N)r   Z_original_startZ_original_end)r)   r*   r+   r   r   r   r,   ?   s    c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	ÚRequirementzÁParse 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   s1  y t  j | ƒ } WnN t k
 rc } z. t d j | | j | j d … ƒ ƒ ‚ WYd  d  } ~ Xn X| j |  _ | j rÐ t j | j ƒ } | j	 oš | j
 s² | j	 rÁ | j
 rÁ t d ƒ ‚ n  | j |  _ n	 d  |  _ t | j rô | j j ƒ  n g  ƒ |  _ t | j ƒ |  _ | j r$| j n d  |  _ d  S)Nz+Invalid requirement, parse error at "{0!r}"é   zInvalid URL given)ÚREQUIREMENTÚparseStringr   r   ÚformatÚlocr$   r%   ÚurlparseÚschemeÚnetlocÚsetr&   ZasListr   r-   r.   )ÚselfZrequirement_stringÚreqÚeZ
parsed_urlr   r   r   Ú__init__Z   s"    3		'zRequirement.__init__c             C   s¹   |  j  g } |  j r@ | j d j d j t |  j ƒ ƒ ƒ ƒ n  |  j rb | j t |  j ƒ ƒ n  |  j r‡ | j d j |  j ƒ ƒ n  |  j	 r¬ | j d j |  j	 ƒ ƒ n  d j | ƒ S)Nz[{0}]r!   z@ {0}z; {0}r(   )
r$   r&   Úappendr3   ÚjoinÚsortedr-   Ústrr%   r.   )r9   Úpartsr   r   r   Ú__str__o   s    	+			zRequirement.__str__c             C   s   d j  t |  ƒ ƒ S)Nz<Requirement({0!r})>)r3   r@   )r9   r   r   r   Ú__repr__€   s    zRequirement.__repr__N)r   r   r   r   r<   rB   rC   r   r   r   r   r/   M   s   r/   )DÚ
__future__r   r   r   ÚstringÚreZpip._vendor.pyparsingr   r   r   r   r	   r
   r   r   r   r   ÚLZpip._vendor.six.moves.urllibr   r5   Úmarkersr   r   Ú
specifiersr   r   r   Ú
ValueErrorr   Úascii_lettersÚdigitsZALPHANUMÚsuppressZLBRACKETZRBRACKETZLPARENZRPARENÚCOMMAZ	SEMICOLONÚATZPUNCTUATIONZIDENTIFIER_ENDÚ
IDENTIFIERÚNAMEZEXTRAÚURIÚURLZEXTRAS_LISTÚEXTRASÚ
_regex_strÚVERBOSEÚ
IGNORECASEZVERSION_PEP440ZVERSION_LEGACYZVERSION_ONEZVERSION_MANYZ_VERSION_SPECZsetParseActionZVERSION_SPECZMARKER_SEPERATORZMARKERZVERSION_AND_MARKERZURL_AND_MARKERZNAMED_REQUIREMENTr1   Úobjectr/   r   r   r   r   Ú<module>   sZ   "(


