3
LY                 @   sr  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 G d
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  B Z*ee ee* Z+e+dZ,e+Z-eddZ.e(e. Z/e-ee&e-  Z0e"ee0 e# dZ1eej2ej3ej4B Z5eej2ej3ej4B Z6e5e6A Z7ee7ee&e7  ddddZ8ee$e8 e% e8B Z9e9j: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 ZAG d!d" d"eBZCd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   u/private/var/folders/7d/20zwc49s3kn54d3vgq8bd4640000gn/T/pip-build-an2lx5zf/pip/pip/_vendor/packaging/requirements.pyr      s   r   [](),;@z-_.namez[^ ]+urlextrasF)
joinStringadjacent	_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   _original_start_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 )	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   yt j|}W n@ tk
rN } z$tdj||j|jd  W Y d d }~X nX |j| _|jrtj|j}|j	ot|j
 s|j	 r|j
 rtd|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&   asListr   r/   r0   )selfrequirement_stringreqe
parsed_urlr   r   r   __init__Z   s"    *
zRequirement.__init__c             C   sz   | j g}| jr*|jdjdjt| j | jr@|jt| j | jrX|jdj| j | j	rp|jdj| j	 dj|S )Nz[{0}]r!   z@ {0}z; {0}r*   )
r$   r&   appendr7   joinsortedr/   strr%   r0   )r>   partsr   r   r   __str__o   s    zRequirement.__str__c             C   s   dj t| S )Nz<Requirement({0!r})>)r7   rG   )r>   r   r   r   __repr__   s    zRequirement.__repr__N)r   r   r   r   rC   rI   rJ   r   r   r   r   r3   M   s   r3   )D
__future__r   r   r   stringrepip._vendor.pyparsingr   r   r   r   r	   r
   r   r   r   r   Lpip._vendor.six.moves.urllibr   r9   markersr   r   
specifiersr   r   r   
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_SPECMARKER_SEPERATORMARKERVERSION_AND_MARKERURL_AND_MARKERNAMED_REQUIREMENTr5   objectr3   r   r   r   r   <module>   sZ   
