U
    ¸mœd×  ã                   @   sv   d dl Zd dl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 G dd	„ d	eƒZG d
d„ dƒZdS )é    N)ÚAnyÚListÚOptionalÚSeté   )Úparse_requirement)ÚParserSyntaxError)ÚMarkerÚ_normalize_extra_values)Ú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   úO/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/packaging/requirements.pyr      s   r   c                   @   sZ   e Zd ZdZeddœdd„Zedœdd„Zedœd	d
„Zedœdd„Z	e
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
  zt |ƒ}W n0 tk
r< } ztt|ƒƒ|‚W 5 d }~X Y nX |j| _|jr²tj |j¡}|j	dkr€tj 
|¡|jkr¨tdƒ‚n(|j	r˜|jr˜|j	s¨|js¨td|j› �ƒ‚|j| _nd | _t|jrÆ|jng ƒ| _t|jƒ| _d | _|jd k	�rt t¡| _t|jƒ| j_d S )NÚfilezInvalid URL givenzInvalid URL: )Ú_parse_requirementr   r   ÚstrÚnameÚurlÚurllibÚparseÚurlparseÚschemeÚ
urlunparseÚnetlocÚsetÚextrasr   Ú	specifierÚmarkerr	   Ú__new__r
   Ú_markers)Úselfr   ÚparsedÚeÚ
parsed_urlr   r   r   Ú__init__!   s0     

ÿÿ
zRequirement.__init__)r   c                 C   s�   | j g}| jr0d t| jƒ¡}| d|› d�¡ | jrF| t| jƒ¡ | jrn| d| j› �¡ | jrn| d¡ | jr†| d| j› �¡ d |¡S )Nú,ú[ú]z@ ú z; Ú )	r   r"   ÚjoinÚsortedÚappendr#   r   r   r$   )r'   ÚpartsÚformatted_extrasr   r   r   Ú__str__;   s    
zRequirement.__str__c                 C   s   d| › d�S )Nz<Requirement('z')>r   ©r'   r   r   r   Ú__repr__O   s    zRequirement.__repr__c                 C   s   t | jjt| ƒfƒS ©N)ÚhashÚ	__class__r   r   r7   r   r   r   Ú__hash__R   s    zRequirement.__hash__)Úotherr   c                 C   sJ   t |tƒstS | j|jkoH| j|jkoH| j|jkoH| j|jkoH| j|jkS r9   )Ú
isinstancer   ÚNotImplementedr   r"   r#   r   r$   )r'   r=   r   r   r   Ú__eq__U   s    

ÿ
þ
ý
ûzRequirement.__eq__)r   r   r   r   r   r+   r6   r8   Úintr<   r   Úboolr@   r   r   r   r   r      s   r   )Úurllib.parser   Útypingr   r   r   r   Ú_parserr   r   Z
_tokenizerr   Úmarkersr	   r
   Ú
specifiersr   Ú
ValueErrorr   r   r   r   r   r   Ú<module>   s   