
(h                 @   s  d  d l  m Z m Z m Z d  d l 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 e j d  d
 k rd  d l m Z n d  d l Z e r0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)   Z0 e d  Z1 e( e e1  e( BZ2 e e( e e2   Z3 e3 d  Z4 e3 Z5 e d  d  Z6 e0 e6 Z7 e5 e e. e5  Z8 e* e e8  e+ d  Z9 e e j: e j; e j< B Z= e e j: e j; e j< B Z> e= e> AZ? e e? e e. e?  d d d d d  Z@ e e, e@ e- e@ B ZA eA jB d d     e
 eA  d!  ZC eC jB d" d     e
 e    d#  Z e jB d$ d     e/ ZD eD e ZE eC e eE  ZF e7 e eE  ZG e4 e e9  eG eF BZH e eH e	 ZI eI jJ d%  Gd& d'   d' eK  ZL d S)(    )absolute_importdivisionprint_functionN)stringStart	stringEndoriginalTextForParseException)
ZeroOrMoreWordOptionalRegexCombine)Literal   )TYPE_CHECKING)MARKER_EXPRMarker)LegacySpecifier	SpecifierSpecifierSet   )parse)Listr   Setc               @   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-kmztzv_d/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>A   s    r2   	specifierc             C   s   | d S)Nr   r   )r/   r0   r1   r   r   r    r2   D   s    markerc             C   s   t  |  | j | j   S)N)r   _original_start_original_end)r/   r0   r1   r   r   r    r2   H   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   r3   r4   )selfrequirement_stringreqe
parsed_urlr   r   r    __init__e   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sortedr3   strr)   r4   )rE   partsr   r   r    __str__   s    	(				zRequirement.__str__c             C   s   d j  t |    S)Nz<Requirement({0!r})>)r<   rO   )rE   r   r   r    __repr__   s    zRequirement.__repr__N)r   r   r   r   rJ   rQ   rR   r   r   r   r    r7   X   s   r7   )M
__future__r   r   r   stringresysZpip._vendor.pyparsingr   r   r   r   r	   r
   r   r   r   r   LZ_typingr   markersr   r   
specifiersr   r   r   version_infourllibr   r?   Ztypingr   Z	TOptionalr   
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_REQUIREMENTr:   r;   objectr7   r   r   r   r    <module>   sj   "(

 	
