o
    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Z	d+d-ddZd.ddZ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 )0z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   R/var/www/html/venv/lib/python3.10/site-packages/pip/_internal/models/direct_url.pyr
      s    r
   ddict[str, Any]expected_typetype[T]keystrdefaultT | None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Iterable[InfoType | None]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>6   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_of5   s   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   s    z _filter_none.<locals>.<dictcomp>)items)r-   r   r   r   _filter_noneC   s   r2   c                   @  sN   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ZdddZdS )r   vcs_infor   namer   vcs	commit_idN
str | Nonerequested_revisionr   dict[str, Any] | Noner   VcsInfo | Nonec                 C  s2   |d u rd S | t |tdt |tdt|tddS )Nr5   r6   r8   )r5   r6   r8   )r"   r   r!   clsr   r   r   r   
_from_dictP   s   


zVcsInfo._from_dictr   c                 C  s   t | j| j| jdS )N)r5   r8   r6   )r2   r5   r8   r6   selfr   r   r   _to_dictZ   s
   zVcsInfo._to_dict)r   r9   r   r:   r   r   )	r   r   r   r4   __annotations__r8   classmethodr=   r@   r   r   r   r   r   H   s   
 	r   c                   @  sV   e Zd ZdZ		ddd	d
ZedddZejdddZedddZ	dddZ
dS )r   archive_infoNhashr7   hashesdict[str, str] | Noner   Nonec                 C  s   || _ || _d S r&   )rF   rE   )r?   rE   rF   r   r   r   __init__e   s   
zArchiveInfo.__init__c                 C  s   | j S r&   )_hashr>   r   r   r   rE   n   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
   rF   copyrJ   )r?   r    	hash_name
hash_valuer   r   r   rE   r   s   



r   r9   ArchiveInfo | Nonec                 C  s(   |d u rd S | t |tdt |tddS )NrE   rF   rE   rF   )r!   r   dictr;   r   r   r   r=      s   zArchiveInfo._from_dictr   c                 C  s   t | j| jdS )NrR   )r2   rE   rF   r>   r   r   r   r@         zArchiveInfo._to_dict)NN)rE   r7   rF   rG   r   rH   )r   r7   )r    r7   r   rH   )r   r9   r   rQ   rA   )r   r   r   r4   rI   propertyrE   setterrC   r=   r@   r   r   r   r   r   b   s    	r   c                   @  s>   e Zd ZU dZded< dZded< edddZdddZdS )r   dir_infor   r4   Fbooleditabler   r9   r   DirInfo | Nonec                 C  s"   |d u rd S | t |tddddS )NrY   F)r   rY   )r"   rX   r;   r   r   r   r=      s   zDirInfo._from_dictr   c                 C  s   t | jpd dS )Nr[   )r2   rY   r>   r   r   r   r@      rT   zDirInfo._to_dictN)r   r9   r   rZ   rA   )	r   r   r   r4   rB   rY   rC   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Zed ddZd!ddZe	d"ddZ
d#ddZe	d$ddZd ddZd%ddZdS )&r	   r   urlr%   r(   Nr7   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)rL   r   r(   r   r5   
ENV_VAR_REmatch)r?   r^   	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urlsplitr\   re   r^   
urlunsplitschemepathqueryfragment)r?   purlr^   surlr   r   r   redacted_url   s   zDirectUrl.redacted_urlrH   c                 C  s   |  |   d S r&   )	from_dictto_dictr>   r   r   r   validate      zDirectUrl.validater   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 )Nr\   r]   rD   rW   r3   )r\   r]   r(   )
r	   r"   r   r!   r,   r   r=   rS   r   r   r;   r   r   r   rq      s   

zDirectUrl.from_dictc                 C  s&   t | j| jd}| j || jj< |S )N)r\   r]   )r2   rp   r]   r(   r@   r4   )r?   resr   r   r   rr      s   zDirectUrl.to_dictsc                 C  s   |  t|S r&   )rq   jsonloads)r<   rv   r   r   r   	from_json   s   zDirectUrl.from_jsonc                 C  s   t j|  ddS )NT)	sort_keys)rw   dumpsrr   r>   r   r   r   to_json   rt   zDirectUrl.to_jsonrX   c                 C  s   t | jto	| jjS r&   )r   r(   r   rY   r>   r   r   r   is_local_editable   s   zDirectUrl.is_local_editable)r^   r   r   r   )r   r   )r   rH   )r   r   r   r	   rA   )rv   r   r   r	   )r   rX   )r   r   r   rB   r]   re   rU   rp   rs   rC   rq   rr   ry   r|   r}   r   r   r   r   r	      s   
 



r	   r&   )
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r#   r$   r   r%   )r-   r   r   r   ) __doc__
__future__r   rw   reurllib.parserf   collections.abcr   dataclassesr   typingr   r   r   r   __all__r   DIRECT_URL_METADATA_NAMEcompilera   	Exceptionr
   r!   r"   r,   r2   r   r   r   r%   r	   r   r   r   r   <module>   s6    

	
,