B
    He                 @   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   s/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/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   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 )Nr   )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 )N)r.   r0   r/   )selfr.   r/   r0   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 )Nr.   r/   r0   )r.   r/   r0   )r   strr   )clsr   r   r   r   
_from_dictR   s    

zVcsInfo._from_dict)r   c             C   s   t | j| j| jdS )N)r.   r0   r/   )r,   r.   r0   r/   )r1   r   r   r   _to_dict\   s    zVcsInfo._to_dict)N)r   r   r   namer3   r   r2   classmethodr   r   r5   r6   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 )N)r;   r:   )r1   r:   r;   r   r   r   r2   g   s    zArchiveInfo.__init__)r   c             C   s   | j S )N)_hash)r1   r   r   r   r:   p   s    zArchiveInfo.hash)r   r   c             C   s   |d k	rvy| 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
   r;   copyr<   )r1   r   	hash_nameZ
hash_valuer   r   r   r:   t   s    


)r   r   c             C   s(   |d krd S | t |tdt |tddS )Nr:   r;   )r:   r;   )r   r3   dict)r4   r   r   r   r   r5      s    zArchiveInfo._from_dictc             C   s   t | j| jdS )N)r:   r;   )r,   r:   r;   )r1   r   r   r   r6      s    zArchiveInfo._to_dict)NN)r   r   r   r7   r   r3   r   r2   propertyr:   setterr8   r   r5   r6   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 )N)rF   )r1   rF   r   r   r   r2      s    zDirInfo.__init__)r   r   c             C   s"   |d krd S | t |tddddS )NrF   F)r   )rF   )r   bool)r4   r   r   r   r   r5      s    zDirInfo._from_dict)r   c             C   s   t | jp
d dS )N)rF   )r,   rF   )r1   r   r   r   r6      s    zDirInfo._to_dict)F)r   r   r   r7   rG   r2   r8   r   r   r3   r   r5   r6   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 )N)rH   r!   rI   )r1   rH   r!   rI   r   r   r   r2      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)r>   r   r!   r   r.   
ENV_VAR_REmatch)r1   rJ   	user_passnetloc_no_user_passr   r   r   _remove_auth_from_netloc   s    
z"DirectUrl._remove_auth_from_netloc)r   c             C   s<   t j| j}| |j}t j|j||j|j	|j
f}|S )zurl 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urlsplitrH   rQ   rJ   
urlunsplitschemepathqueryfragment)r1   purlrJ   surlr   r   r   redacted_url   s
    zDirectUrl.redacted_urlc             C   s   |  |   d S )N)	from_dictto_dict)r1   r   r   r   validate   s    zDirectUrl.validate)r   r   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 )NrH   rI   r9   rE   r-   )rH   rI   r!   )
r	   r   r3   r   r&   r   r5   rB   r   r   )r4   r   r   r   r   r]      s    

zDirectUrl.from_dictc             C   s&   t | j| jd}| j || jj< |S )N)rH   rI   )r,   r\   rI   r!   r6   r7   )r1   resr   r   r   r^      s
    
zDirectUrl.to_dict)sr   c             C   s   |  t|S )N)r]   jsonloads)r4   ra   r   r   r   	from_json   s    zDirectUrl.from_jsonc             C   s   t j|  ddS )NT)	sort_keys)rb   dumpsr^   )r1   r   r   r   to_json   s    zDirectUrl.to_jsonc             C   s   t | jto| jjS )N)r   r!   r   rF   )r1   r   r   r   is_local_editable   s    zDirectUrl.is_local_editable)N)r   r   r   r3   r   r   r2   rQ   rC   r\   r_   r8   r   r   r]   r^   rd   rg   rG   rh   r   r   r   r   r	      s   )N)N)__doc__rb   reurllib.parserR   typingr   r   r   r   r   r   r   __all__r   DIRECT_URL_METADATA_NAMEcompilerM   	Exceptionr
   r3   r   r   r&   r,   r   r   r   r   r	   r   r   r   r   <module>   s0   $
,