3
ûâdeD  ã               @   sf  d dl Z d dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZ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, ƒ Z/e!ee/ƒ e" dƒZ0eej1e j2e j3B ƒZ4eej1e j2e j3B ƒZ5e4e5A Z6e
e6ee%e6 ƒ ddd�dƒZ7ee#e7 e$ e7B ƒZ8e8j9dd„ ƒ ee8ƒdƒZ:e:j9dd„ ƒ eeƒ ƒdƒZej9dd„ ƒ e&Z;e;e Z<e:ee<ƒ Z=e.ee<ƒ Z>e+ee0ƒ e>e=B  Z?ee? e Z@e@jAdƒ G dd „ d ƒZBdS )!é    N)ÚListÚOptionalÚSet)
ÚCombineÚLiteralr   ÚParseExceptionÚRegexÚWordÚ
ZeroOrMoreÚoriginalTextForÚ	stringEndÚstringStarté   )Ú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-red6nood/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>@   s    r,   Ú	specifierc             C   s   |d S )Nr   r   )r)   r*   r+   r   r   r   r,   C   s    Úmarkerc             C   s   t | |j|j… ƒS )N)r   Ú_original_startÚ_original_end)r)   r*   r+   r   r   r   r,   G   s    zx[]c               @   s<   e Zd ZdZeddœdd„Zedœdd„Zedœ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.
    N)Úrequirement_stringÚreturnc             C   s  yt j|ƒ}W nH tk
rV } z,td||j|jd … ›d|j› �ƒ‚W Y d d }~X nX |j| _|jrÒtj	j
|jƒ}|jdkrštj	j|ƒ|jkrÈtdƒ‚n.|jo¤|j s¸|j rÈ|j rÈtd|j› �ƒ‚|j| _nd | _t|jrê|jjƒ ng ƒ| _t|jƒ| _|j�r|jnd | _d S )NzParse error at "é   z": ÚfilezInvalid URL givenzInvalid URL: )ÚREQUIREMENTÚparseStringr   r   ÚlocÚmsgr"   r#   ÚurllibÚparseÚurlparseÚschemeÚ
urlunparseÚnetlocÚsetr$   ÚasListr   r-   r.   )Úselfr2   ÚreqÚeÚ
parsed_urlr   r   r   Ú__init__d   s&    6


zRequirement.__init__)r3   c             C   s�   | j g}| jr0djt| jƒƒ}|jd|› d�ƒ | jrF|jt| jƒƒ | jrn|jd| j› �ƒ | jrn|jdƒ | jr†|jd| j› �ƒ dj|ƒS )Nr   r   r   z@ ú z; r(   )	r"   r$   ÚjoinÚsortedÚappendr-   Ústrr#   r.   )rB   ÚpartsZformatted_extrasr   r   r   Ú__str__}   s    
zRequirement.__str__c             C   s   d| › d�S )Nz<Requirement('z')>r   )rB   r   r   r   Ú__repr__‘   s    zRequirement.__repr__)r   r   r   r   rK   rF   rM   rN   r   r   r   r   r1   W   s   r1   )CÚreÚstringÚurllib.parser:   Útypingr   r   Z	TOptionalr   Zpip._vendor.pyparsingr   r   ÚLr   r   r	   r
   r   r   r   Ú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_SEPARATORÚMARKERÚVERSION_AND_MARKERÚURL_AND_MARKERÚNAMED_REQUIREMENTr6   r7   r1   r   r   r   r   Ú<module>   sZ   0

