U
    ;»{j²  ã                   @   s^  d Z ddlZddlZddlZddlmZ ddlmZ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eG dd	„ d	ƒƒZG dd„ dƒZeG dd„ dƒƒZeeeef ZeG dd„ dƒƒZ dS ) z	 PEP 610 é    N)Ú	dataclass)ÚAnyÚClassVarÚ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   ú@/tmp/pip-install-zsn1f9xv/pip/pip/_internal/models/direct_url.pyr      s   )ÚdÚexpected_typeÚkeyÚdefaultÚreturnc                 C   s<   || kr|S | | }t ||ƒs8t|›d|› d|› d�ƒ‚|S )z3Get value from dictionary and verify expected type.z has unexpected type for z (expected ú))Ú
isinstancer   ©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    r0   c                   @   st   e Zd ZU dZeed< eed< eed< dZee ed< e	ee
eef  ed  dœdd	„ƒZe
eef d
œdd„ZdS )r   Úvcs_infoÚnameÚvcsÚ	commit_idNÚrequested_revision©r   r   c                 C   s2   |d krd S | t |tdƒt |tdƒt|tdƒd�S )Nr3   r4   r5   )r3   r4   r5   )r    Ústrr   ©Úclsr   r   r   r   Ú
_from_dictM   s    


ýzVcsInfo._from_dict©r   c                 C   s   t | j| j| jd�S )N)r3   r5   r4   )r0   r3   r5   r4   ©Úselfr   r   r   Ú_to_dictW   s
    ýzVcsInfo._to_dict)r   r   r   r2   r   Ú__annotations__r7   r5   r   Ú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#   )rC   rB   )r=   rB   rC   r   r   r   Ú__init__b   s    zArchiveInfo.__init__r;   c                 C   s   | j S r#   )Ú_hashr<   r   r   r   rB   k   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   rC   ÚcopyrE   )r=   r   Ú	hash_nameZ
hash_valuer   r   r   rB   o   s    ÿ



r6   c                 C   s(   |d krd S | t |tdƒt |tdƒd�S )NrB   rC   ©rB   rC   )r   r7   Údictr8   r   r   r   r:   �   s    zArchiveInfo._from_dictc                 C   s   t | j| jd�S )NrK   )r0   rB   rC   r<   r   r   r   r>   ‡   s    zArchiveInfo._to_dict)NN)r   r   r   r2   r   r7   r   rD   ÚpropertyrB   Úsetterr@   r   r:   r>   r   r   r   r   r   _   s     ýü	"c                   @   s`   e Zd ZU dZeed< dZeed< ee	e
eef  e	d  dœdd„ƒZe
eef dœd	d
„ZdS )r   Údir_infor2   FÚeditabler6   c                 C   s"   |d krd S | t |tddd�d�S )NrP   F)r   ©rP   )r    Úboolr8   r   r   r   r:   ‘   s    zDirInfo._from_dictr;   c                 C   s   t | jp
d d�S )NrQ   )r0   rP   r<   r   r   r   r>   —   s    zDirInfo._to_dictN)r   r   r   r2   r   r?   rP   rR   r@   r   r   r7   r   r:   r>   r   r   r   r   r   ‹   s
   
"c                   @   sÀ   e Zd ZU eed< eed< dZee ed< 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   Úurlr%   NÚsubdirectory)Ú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)rG   r   r%   r   r3   Ú
ENV_VAR_REÚmatch)r=   rU   Ú	user_passZ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ÚurlsplitrS   r[   rU   Ú
urlunsplitÚschemeÚpathÚqueryÚfragment)r=   ÚpurlrU   Ú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 )NrS   rT   rA   rO   r1   )rS   rT   r%   )
r   r    r7   r   r*   r   r:   rL   r   r   r8   r   r   r   rg   Â   s    

ýÿýzDirectUrl.from_dictc                 C   s&   t | j| jd�}| j ¡ || jj< |S )N)rS   rT   )r0   rf   rT   r%   r>   r2   )r=   Ú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   rP   r<   r   r   r   Úis_local_editableß   s    zDirectUrl.is_local_editable)r   r   r   r7   r?   r!   rT   r   r[   rM   rf   ri   r@   r   r   rg   rh   rn   rq   rR   rr   r   r   r   r   r   ž   s   
)N)N)!Ú__doc__rl   ÚreÚurllib.parser\   Zdataclassesr   Útypingr   r   r   r   r   r   r	   r
   Ú__all__r   ZDIRECT_URL_METADATA_NAMEÚcompilerX   Ú	Exceptionr   r7   r   r    r*   r0   r   r   r   r!   r   r   r   r   r   Ú<module>   sR   (û
 ÿ
   þ ÿ
   þ	,