a
    sh                     @  s,  d Z ddlmZ ddlZddlZddlZddlmZ ddl	m
Z
 ddlmZmZmZmZ g dZedZd	Zed
ZG dd deZd'ddddddddZd(ddddddddZdddddZdd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    )annotationsN)Iterable)	dataclass)AnyClassVar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   [/var/www/html/assistant/venv/lib/python3.9/site-packages/pip/_internal/models/direct_url.pyr
      s   r
   dict[str, Any]ztype[T]strzT | None)dexpected_typekeydefaultreturnc                 C  s<   || v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 u r$t| d|S )Nz must have a value)r   r
   r   r   r   r   _get_required,   s    r    zIterable[InfoType | None]InfoType)infosr   c                 C  sF   dd | D } | st dt| dkr.t d| d d us>J | d S )Nc                 S  s   g | ]}|d ur|qS Nr   ).0infor   r   r   
<listcomp>6       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)r"   r   r   r   _exactly_one_of5   s    r*   r   )kwargsr   c                  K  s   dd |   D S )z Make dict excluding None values.c                 S  s   i | ]\}}|d ur||qS r#   r   )r$   kvr   r   r   
<dictcomp>E   r'   z _filter_none.<locals>.<dictcomp>)items)r+   r   r   r   _filter_noneC   s    r0   c                   @  sX   e Zd ZU dZded< ded< ded< dZded	< ed
ddddZddddZdS )r   vcs_infor   namer   vcs	commit_idN
str | Nonerequested_revisiondict[str, Any] | NonezVcsInfo | Noner   r   c                 C  s2   |d u rd S | t |tdt |tdt|tddS )Nr3   r4   r6   )r3   r4   r6   )r    r   r   clsr   r   r   r   
_from_dictP   s    


zVcsInfo._from_dictr   r   c                 C  s   t | j| j| jdS )N)r3   r6   r4   )r0   r3   r6   r4   selfr   r   r   _to_dictZ   s
    zVcsInfo._to_dict)	r   r   r   r2   __annotations__r6   classmethodr;   r?   r   r   r   r   r   H   s   
	r   c                   @  sn   e Zd ZdZdddddddZedd	d
dZejdddddZedddddZ	dd	ddZ
dS )r   archive_infoNr5   zdict[str, str] | NoneNone)hashhashesr   c                 C  s   || _ || _d S r#   )rE   rD   )r>   rD   rE   r   r   r   __init__e   s    zArchiveInfo.__init__r<   c                 C  s   | j S r#   )_hashr=   r   r   r   rD   n   s    zArchiveInfo.hash)r   r   c                 C  s~   |d urtz| dd\}}W n  ty<   td|Y n0 | jd u rT||i| _n || jvrt| j | _|| j|< || _d S )N=r(   z"invalid archive_info.hash format: )split
ValueErrorr
   rE   copyrG   )r>   r   	hash_nameZ
hash_valuer   r   r   rD   r   s    



r7   zArchiveInfo | Noner8   c                 C  s(   |d u rd S | t |tdt |tddS )NrD   rE   rD   rE   )r   r   dictr9   r   r   r   r;      s    zArchiveInfo._from_dictr   c                 C  s   t | j| jdS )NrM   )r0   rD   rE   r=   r   r   r   r?      s    zArchiveInfo._to_dict)NN)r   r   r   r2   rF   propertyrD   setterrA   r;   r?   r   r   r   r   r   b   s     	r   c                   @  sH   e Zd ZU dZded< dZded< eddd	d
dZddddZdS )r   dir_infor   r2   Fbooleditabler7   zDirInfo | Noner8   c                 C  s"   |d u rd S | t |tddddS )NrS   F)r   rS   )r    rR   r9   r   r   r   r;      s    zDirInfo._from_dictr   r<   c                 C  s   t | jp
d dS )NrT   )r0   rS   r=   r   r   r   r?      s    zDirInfo._to_dictN)	r   r   r   r2   r@   rS   rA   r;   r?   r   r   r   r   r      s
   
r   c                   @  s   e Zd ZU ded< ded< dZded< dddd	d
ZeddddZddddZe	dd dddZ
ddddZe	dd dddZddddZddddZdS )r	   r   urlr!   r%   Nr5   subdirectory)netlocr   c                 C  sR   d|vr|S | dd\}}t| jtr@| jjdkr@|dkr@|S t|rN|S |S )N@r(   git)rI   r   r%   r   r3   
ENV_VAR_REmatch)r>   rW   	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 )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urlsplitrU   r^   rW   
urlunsplitschemepathqueryfragment)r>   purlrW   surlr   r   r   redacted_url   s    zDirectUrl.redacted_urlrC   c                 C  s   |  |   d S r#   )	from_dictto_dictr=   r   r   r   validate   s    zDirectUrl.validater   r8   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 )NrU   rV   rB   rQ   r1   )rU   rV   r%   )
r	   r    r   r   r*   r   r;   rN   r   r   r9   r   r   r   rj      s    

zDirectUrl.from_dictc                 C  s&   t | j| jd}| j || jj< |S )N)rU   rV   )r0   ri   rV   r%   r?   r2   )r>   resr   r   r   rk      s    zDirectUrl.to_dict)sr   c                 C  s   |  t|S r#   )rj   jsonloads)r:   rn   r   r   r   	from_json   s    zDirectUrl.from_jsonc                 C  s   t j|  ddS )NT)	sort_keys)ro   dumpsrk   r=   r   r   r   to_json   s    zDirectUrl.to_jsonrR   c                 C  s   t | jto| jjS r#   )r   r%   r   rS   r=   r   r   r   is_local_editable   s    zDirectUrl.is_local_editable)r   r   r   r@   rV   r^   rO   ri   rl   rA   rj   rk   rq   rt   ru   r   r   r   r   r	      s   
r	   )N)N) __doc__
__future__r   ro   reurllib.parser_   collections.abcr   Zdataclassesr   typingr   r   r   r   __all__r   DIRECT_URL_METADATA_NAMEcompilerZ   	Exceptionr
   r   r    r*   r0   r   r   r   r!   r	   r   r   r   r   <module>   s4   
  	,