U
    ƒIÀd  ã                   @   sB  d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZ dddddgZed	ƒZd
Ze d¡ZG dd„ deƒZdeeef e
e ee	e e	e dœdd„Zdeeef e
e ee	e edœdd„Zee	d  ddœdd„Zeeeef dœdd„ZG dd„ dƒZG dd„ dƒZG dd„ dƒZeeeef ZG dd„ dƒZdS )z	 PEP 610 é    N)ÚAnyÚDictÚIterableÚOptionalÚTypeÚTypeVarÚUnionÚ	DirectUrlÚDirectUrlValidationErrorÚDirInfoÚArchiveInfoÚVcsInfoÚTzdirect_url.jsonz.^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$c                   @   s   e Zd ZdS )r
   N)Ú__name__Ú
__module__Ú__qualname__© r   r   úX/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pip/_internal/models/direct_url.pyr
      s   )ÚdÚexpected_typeÚkeyÚdefaultÚreturnc                 C   s4   || kr|S | | }t ||ƒs0td |||¡ƒ‚|S )z3Get value from dictionary and verify expected type.z-{!r} has unexpected type for {} (expected {}))Ú
isinstancer
   Úformat©r   r   r   r   Úvaluer   r   r   Ú_get   s    
  ÿÿr   c                 C   s(   t | |||ƒ}|d kr$t|› d�ƒ‚|S )Nz must have a value)r   r
   r   r   r   r   Ú_get_required)   s    r   ÚInfoType)Úinfosr   c                 C   sF   dd„ | D ƒ} | st dƒ‚t| ƒdkr.t dƒ‚| d d k	s>t‚| d S )Nc                 S   s   g | ]}|d k	r|‘qS ©Nr   )Ú.0Úinfor   r   r   Ú
<listcomp>3   s      z#_exactly_one_of.<locals>.<listcomp>z/missing one of archive_info, dir_info, vcs_infoé   z1more than one of archive_info, dir_info, vcs_infor   )r
   ÚlenÚAssertionError)r    r   r   r   Ú_exactly_one_of2   s    ÿÿr(   )Úkwargsr   c                  K   s   dd„ |   ¡ D ƒS )z Make dict excluding None values.c                 S   s   i | ]\}}|d k	r||“qS r!   r   )r"   ÚkÚvr   r   r   Ú
<dictcomp>B   s       z _filter_none.<locals>.<dictcomp>)Úitems)r)   r   r   r   Ú_filter_none@   s    r.   c                   @   sd   e Zd ZdZdeeee ddœdd„Zeeeee	f  ed  dœdd„ƒZ
eee	f d	œd
d„ZdS )r   Úvcs_infoN)ÚvcsÚ	commit_idÚrequested_revisionr   c                 C   s   || _ || _|| _d S r!   ©r0   r2   r1   )Úselfr0   r1   r2   r   r   r   Ú__init__H   s    zVcsInfo.__init__©r   r   c                 C   s2   |d krd S | t |tdƒt |tdƒt|tdƒd�S )Nr0   r1   r2   )r0   r1   r2   )r   Ústrr   ©Úclsr   r   r   r   Ú
_from_dictR   s    


ýzVcsInfo._from_dict©r   c                 C   s   t | j| j| jd�S )Nr3   )r.   r0   r2   r1   ©r4   r   r   r   Ú_to_dict\   s
    ýzVcsInfo._to_dict)N)r   r   r   Únamer7   r   r5   Úclassmethodr   r   r:   r=   r   r   r   r   r   E   s    üû
"	c                   @   sž   e Zd ZdZdee eeeef  ddœdd„Zeee dœdd„ƒZ	e	j
ee dd	œd
d„ƒZ	eeeeef  ed  dœdd„ƒZeeef dœdd„ZdS )r   Úarchive_infoN)ÚhashÚhashesr   c                 C   s   || _ || _d S r!   )rB   rA   )r4   rA   rB   r   r   r   r5   g   s    zArchiveInfo.__init__r;   c                 C   s   | j S r!   )Ú_hashr<   r   r   r   rA   p   s    zArchiveInfo.hash)r   r   c                 C   s€   |d k	rvz|  dd¡\}}W n" tk
r>   td|›�ƒ‚Y nX | jd krV||i| _n || jkrv| j ¡ | _|| j|< || _d S )Nú=r%   z"invalid archive_info.hash format: )ÚsplitÚ
ValueErrorr
   rB   ÚcopyrC   )r4   r   Ú	hash_nameÚ
hash_valuer   r   r   rA   t   s    ÿ



r6   c                 C   s(   |d krd S | t |tdƒt |tdƒd�S )NrA   rB   ©rA   rB   )r   r7   Údictr8   r   r   r   r:   †   s    zArchiveInfo._from_dictc                 C   s   t | j| jd�S )NrJ   )r.   rA   rB   r<   r   r   r   r=   Œ   s    zArchiveInfo._to_dict)NN)r   r   r   r>   r   r7   r   r5   ÚpropertyrA   Úsetterr?   r   r:   r=   r   r   r   r   r   d   s     ýü	"c                   @   s\   e Zd ZdZdeddœdd„Zeeee	e
f  ed  dœdd	„ƒZee	e
f d
œdd„ZdS )r   Údir_infoFN)Úeditabler   c                 C   s
   || _ d S r!   ©rO   )r4   rO   r   r   r   r5   “   s    zDirInfo.__init__r6   c                 C   s"   |d krd S | t |tddd�d�S )NrO   F)r   rP   )r   Úboolr8   r   r   r   r:   ™   s    zDirInfo._from_dictr;   c                 C   s   t | jp
d d�S )NrP   )r.   rO   r<   r   r   r   r=   Ÿ   s    zDirInfo._to_dict)F)r   r   r   r>   rQ   r5   r?   r   r   r7   r   r:   r=   r   r   r   r   r   �   s    þý"c                   @   s¸   e Zd Zdeeee ddœdd„Zeedœdd„Zeedœd	d
„ƒZ	ddœdd„Z
eeeef d dœdd„ƒZeeef dœdd„Zeed dœdd„ƒZedœdd„Zedœdd„ZdS )r	   N)Úurlr#   Úsubdirectoryr   c                 C   s   || _ || _|| _d S r!   )rR   r#   rS   )r4   rR   r#   rS   r   r   r   r5   §   s    zDirectUrl.__init__)Únetlocr   c                 C   sR   d|kr|S |  dd¡\}}t| jtƒr@| jjdkr@|dkr@|S t |¡rN|S |S )Nú@r%   Úgit)rE   r   r#   r   r0   Ú
ENV_VAR_REÚmatch)r4   rT   Ú	user_passÚnetloc_no_user_passr   r   r   Ú_remove_auth_from_netloc±   s    
ÿ
þý
z"DirectUrl._remove_auth_from_netlocr;   c                 C   s<   t j | j¡}|  |j¡}t j |j||j|j	|j
f¡}|S )z¯url with user:password part removed unless it is formed with
        environment variables as specified in PEP 610, or it is ``git``
        in the case of a git URL.
        )ÚurllibÚparseÚurlsplitrR   r[   rT   Ú
urlunsplitÚschemeÚpathÚqueryÚfragment)r4   ÚpurlrT   Úsurlr   r   r   Úredacted_url¿   s    ÿzDirectUrl.redacted_urlc                 C   s   |   |  ¡ ¡ d S r!   )Ú	from_dictÚto_dictr<   r   r   r   ÚvalidateÌ   s    zDirectUrl.validater6   c                 C   sR   t t|tdƒt|tdƒtt t|tdƒ¡t t|tdƒ¡t	 t|tdƒ¡gƒd�S )NrR   rS   r@   rN   r/   )rR   rS   r#   )
r	   r   r7   r   r(   r   r:   rK   r   r   r8   r   r   r   rg   Ï   s    

ýÿýzDirectUrl.from_dictc                 C   s&   t | j| jd�}| j ¡ || jj< |S )N)rR   rS   )r.   rf   rS   r#   r=   r>   )r4   Úresr   r   r   rh   Ý   s    þzDirectUrl.to_dict)Úsr   c                 C   s   |   t |¡¡S r!   )rg   ÚjsonÚloads)r9   rk   r   r   r   Ú	from_jsonå   s    zDirectUrl.from_jsonc                 C   s   t j|  ¡ dd�S )NT)Ú	sort_keys)rl   Údumpsrh   r<   r   r   r   Úto_jsoné   s    zDirectUrl.to_jsonc                 C   s   t | jtƒo| jjS r!   )r   r#   r   rO   r<   r   r   r   Úis_local_editableì   s    zDirectUrl.is_local_editable)N)r   r   r   r7   r   r   r5   r[   rL   rf   ri   r?   r   r   rg   rh   rn   rq   rQ   rr   r   r   r   r   r	   ¦   s$    üû
)N)N)Ú__doc__rl   ÚreÚurllib.parser\   Útypingr   r   r   r   r   r   r   Ú__all__r   ÚDIRECT_URL_METADATA_NAMEÚcompilerW   Ú	Exceptionr
   r7   r   r   r(   r.   r   r   r   r   r	   r   r   r   r   Ú<module>   sJ   $û
 ÿ
   þ ÿ
   þ	,