o
    =g                     @   sp  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 g dZedZdZedZG d	d
 d
eZ	d#de
eef dee dedee dee f
ddZ	d#de
eef dee dedee def
ddZdeed  ddfddZdede
eef f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   R/var/www/html/venv/lib/python3.10/site-packages/pip/_internal/models/direct_url.pyr      s    r   dexpected_typekeydefaultreturnc                 C   s<   || vr|S | | }t ||st|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    infosInfoTypec                 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>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)r!   r   r   r   _exactly_one_of2   s   r)   kwargsc                  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>B   s    z _filter_none.<locals>.<dictcomp>)items)r*   r   r   r   _filter_none@   s   r/   c                   @   sv   e Zd ZU dZeed< eed< eed< dZee ed< e	dee
eef  ded  fd	d
Zde
eef fddZdS )r   vcs_infonamevcs	commit_idNrequested_revisionr   r   c                 C   s2   |d u rd S | t |tdt |tdt|tddS )Nr2   r3   r4   )r2   r3   r4   )r    strr   clsr   r   r   r   
_from_dictM   s   


zVcsInfo._from_dictc                 C   s   t | j| j| jdS )N)r2   r4   r3   )r/   r2   r4   r3   selfr   r   r   _to_dictW   s
   zVcsInfo._to_dict)r   r   r   r1   r   __annotations__r5   r4   r   classmethodr   r   r8   r;   r   r   r   r   r   E   s   
 $	r   c                   @   s   e Zd ZdZ		ddee deeeef  ddfddZedee fdd	Z	e	j
d
ee ddfdd	Z	edeeeef  ded  fddZdeeef fddZdS )r   archive_infoNhashhashesr   c                 C   s   || _ || _d S r#   )r@   r?   )r:   r?   r@   r   r   r   __init__b   s   
zArchiveInfo.__init__c                 C   s   | j S r#   )_hashr9   r   r   r   r?   k   s   zArchiveInfo.hashr   c                 C   sz   |d ur8z
| dd\}}W n ty   td|w | jd u r(||i| _n|| jvr8| j | _|| j|< || _d S )N=r'   z"invalid archive_info.hash format: )split
ValueErrorr   r@   copyrB   )r:   r   	hash_name
hash_valuer   r   r   r?   o   s   



r   c                 C   s(   |d u rd S | t |tdt |tddS )Nr?   r@   r?   r@   )r   r5   dictr6   r   r   r   r8      s   zArchiveInfo._from_dictc                 C   s   t | j| jdS )NrI   )r/   r?   r@   r9   r   r   r   r;         zArchiveInfo._to_dict)NN)r   r   r   r1   r   r5   r   rA   propertyr?   setterr=   r   r8   r;   r   r   r   r   r   _   s$    
	$r   c                   @   sb   e Zd ZU dZeed< dZeed< ede	e
eef  de	d  fddZde
eef fd	d
ZdS )r   dir_infor1   Feditabler   r   c                 C   s"   |d u rd S | t |tddddS )NrO   F)r   rO   )r    boolr6   r   r   r   r8      s   zDirInfo._from_dictc                 C   s   t | jpd dS )NrP   )r/   rO   r9   r   r   r   r;      rK   zDirInfo._to_dictN)r   r   r   r1   r   r<   rO   rQ   r=   r   r   r5   r   r8   r;   r   r   r   r   r      s   
 $r   c                   @   s   e Zd ZU eed< eed< dZee ed< dedefddZe	defd	d
Z
dddZedeeef dd fddZdeeef fddZededd fddZdefddZdefddZdS )r   urlr%   N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|r'|S |S )N@r'   git)rD   r   r%   r   r2   
ENV_VAR_REmatch)r:   rT   	user_passnetloc_no_user_passr   r   r   _remove_auth_from_netloc   s   

z"DirectUrl._remove_auth_from_netlocc                 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urlsplitrR   r[   rT   
urlunsplitschemepathqueryfragment)r:   purlrT   surlr   r   r   redacted_url   s   zDirectUrl.redacted_urlc                 C   s   |  |   d S r#   )	from_dictto_dictr9   r   r   r   validate      zDirectUrl.validater   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   r0   )rR   rS   r%   )
r   r    r5   r   r)   r   r8   rJ   r   r   r6   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;   r1   )r:   resr   r   r   rh      s   zDirectUrl.to_dictsc                 C   s   |  t|S r#   )rg   jsonloads)r7   rl   r   r   r   	from_json   s   zDirectUrl.from_jsonc                 C   s   t j|  ddS )NT)	sort_keys)rm   dumpsrh   r9   r   r   r   to_json   rj   zDirectUrl.to_jsonc                 C   s   t | jto	| jjS r#   )r   r%   r   rO   r9   r   r   r   is_local_editable   s   zDirectUrl.is_local_editable)r   N)r   r   r   r5   r<   r"   rS   r   r[   rL   rf   ri   r=   r   r   rg   rh   ro   rr   rQ   rs   r   r   r   r   r      s   
 
r   r#   )!__doc__rm   reurllib.parser\   dataclassesr   typingr   r   r   r   r   r   r	   r
   __all__r   DIRECT_URL_METADATA_NAMEcompilerW   	Exceptionr   r5   r   r    r)   r/   r   r   r   r"   r   r   r   r   r   <module>   sZ    (




	,