
    )h                        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j&                  d      Z G d	 d
e      Z	 dde
eef   dee   dedee   dee   f
dZ	 dde
eef   dee   dedee   def
dZdeed      ddfdZdede
eef   fdZe G d d             Z G d d      Ze G d d             Zeeeef   Ze G d d             Z y) 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                       e Zd Zy)r   N)__name__
__module____qualname__     R/var/www/html/venv/lib/python3.12/site-packages/pip/_internal/models/direct_url.pyr   r      s    r   r   dexpected_typekeydefaultreturnc                 \    || 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   values        r   _getr#      sN     !|cFEe]+&i0[qQ
 	
 Lr   c                 B    t        | |||      }|t        | d      |S )Nz must have a value)r#   r   r!   s        r   _get_requiredr%   )   s1     M30E}&#.@'ABBLr   infosInfoTypec                     | D cg c]  }||	 } }| st        d      t        |       dkD  rt        d      | d   J | d   S c c}w )Nz/missing one of archive_info, dir_info, vcs_info   z1more than one of archive_info, dir_info, vcs_infor   )r   len)r&   infos     r   _exactly_one_ofr,   2   sj    #8dt'7T8E8&=
 	
 5zA~&?
 	
 88O 9s
   AAkwargsc                  \    | j                         D ci c]  \  }}|	|| c}}S c c}}w )z Make dict excluding None values.)items)r-   kvs      r   _filter_noner2   @   s(    #\\^=TQq}AqD===s   
((c                       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	       Zde
eef   fd
Zy)r   vcs_infonamevcs	commit_idNrequested_revisionr   r   c           	      x    |y  | t        |t        d      t        |t        d      t        |t        d            S )Nr6   r7   r8   )r6   r7   r8   )r%   strr#   clsr   s     r   
_from_dictzVcsInfo._from_dictM   s<    9ae,#AsK8#As,@A
 	
r   c                 Z    t        | j                  | j                  | j                        S )N)r6   r8   r7   )r2   r6   r8   r7   selfs    r   _to_dictzVcsInfo._to_dictW   s&    #66nn
 	
r   )r   r   r   r5   r   __annotations__r:   r8   r   classmethodr   r   r=   rA   r   r   r   r   r   E   sk    D(	HN(,,
8DcN3 
8K 
 

$sCx. 
r   r   c                       e Zd ZdZ	 	 ddee   deeeef      ddfdZedee   fd       Z	e	j                  dee   ddfd	       Z	ed
eeeef      ded    fd       Zdeeef   fdZy)r   archive_infoNhashhashesr   c                      || _         || _        y N)rG   rF   )r@   rF   rG   s      r   __init__zArchiveInfo.__init__b   s     	r   c                     | j                   S rI   )_hashr?   s    r   rF   zArchiveInfo.hashk   s    zzr   r"   c                 *   |o	 |j                  dd      \  }}| j                  ||i| _        || _        y || j                  vr.| j                  j	                         | _        || j                  |<   || _        y # t        $ r t        d|      w xY w)N=r)   z"invalid archive_info.hash format: )split
ValueErrorr   rG   copyrL   )r@   r"   	hash_name
hash_values       r   rF   zArchiveInfo.hasho   s    (-C(;%	:
 {{"(*5 
 $++-"kk..0)3I&
  .8	B s   A: :Br   c                 X    |y  | t        |t        d      t        |t        d            S )NrF   rG   rF   rG   )r#   r:   dictr;   s     r   r=   zArchiveInfo._from_dict   s)    9QV,T!T85LMMr   c                 D    t        | j                  | j                        S )NrU   )r2   rF   rG   r?   s    r   rA   zArchiveInfo._to_dict   s    4;;??r   )NN)r   r   r   r5   r   r:   r   rJ   propertyrF   setterrC   r   r=   rA   r   r   r   r   r   _   s    D #+/sm c3h( 
	 hsm   
[[(3- D  " N8DcN3 N8O N N
@$sCx. @r   r   c                   p    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       Zde
eef   fdZy	)
r   dir_infor5   Feditabler   r   c                 <    |y  | t        |t        dd            S )Nr\   F)r   r\   )r%   boolr;   s     r   r=   zDirInfo._from_dict   s     9M!T:uMNNr   c                 6    t        | j                  xs d       S )Nr^   )r2   r\   r?   s    r   rA   zDirInfo._to_dict   s    T]]%:d;;r   N)r   r   r   r5   r   rB   r\   r_   rC   r   r   r:   r   r=   rA   r   r   r   r   r      s`    D(HdO8DcN3 O8K O O
<$sCx. <r   r   c                       e Zd ZU eed<   eed<   dZee   ed<   dedefdZe	defd       Z
dd	Zed
eeef   dd fd       Zdeeef   fdZededd fd       ZdefdZdefdZy)r   urlr+   Nsubdirectorynetlocr   c                     d|vr|S |j                  dd      \  }}t        | j                  t              r | j                  j                  dk(  r|dk(  r|S t
        j                  |      r|S |S )N@r)   git)rO   r    r+   r   r6   
ENV_VAR_REmatch)r@   rd   	user_passnetloc_no_user_passs       r   _remove_auth_from_netlocz"DirectUrl._remove_auth_from_netloc   si    fM)/c1)=&	&tyy'*		&U"MI&M""r   c                 &   t         j                  j                  | j                        }| j	                  |j
                        }t         j                  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urlsplitrb   rl   rd   
urlunsplitschemepathqueryfragment)r@   purlrd   surls       r   redacted_urlzDirectUrl.redacted_url   si     ||$$TXX...t{{;||&&[[&$))TZZG
 r   c                 B    | j                  | j                                y rI   )	from_dictto_dictr?   s    r   validatezDirectUrl.validate   s    t||~&r   r   c                 >   t        t        |t        d      t        |t        d      t	        t
        j                  t        |t        d            t        j                  t        |t        d            t        j                  t        |t        d            g            S )Nrb   rc   rE   r[   r4   )rb   rc   r+   )
r   r%   r:   r#   r,   r   r=   rV   r   r   r;   s     r   rz   zDirectUrl.from_dict   sy    ae,an5 **44+HI&&tAtZ'@A&&tAtZ'@A

 
	
r   c                     t        | j                  | j                        }| j                  j	                         || j                  j
                  <   |S )N)rb   rc   )r2   rx   rc   r+   rA   r5   )r@   ress     r   r{   zDirectUrl.to_dict   sD    !!**
 #ii002DIINN
r   sc                 J    | j                  t        j                  |            S rI   )rz   jsonloads)r<   r   s     r   	from_jsonzDirectUrl.from_json   s    }}TZZ]++r   c                 L    t        j                  | j                         d      S )NT)	sort_keys)r   dumpsr{   r?   s    r   to_jsonzDirectUrl.to_json   s    zz$,,.D99r   c                 f    t        | j                  t              xr | j                  j                  S rI   )r    r+   r   r\   r?   s    r   is_local_editablezDirectUrl.is_local_editable   s"    $))W-D$))2D2DDr   )r   N)r   r   r   r:   rB   r'   rc   r   rl   rX   rx   r|   rC   r   r   rz   r{   r   r   r_   r   r   r   r   r   r      s    	H
N"&L(3-&#s #s # 
c 
 
' 
$sCx. 
[ 
 
c3h  ,# ,+ , ,: :E4 Er   r   rI   )!__doc__r   reurllib.parsern   dataclassesr   typingr   r   r   r   r   r	   r
   r   __all__r   DIRECT_URL_METADATA_NAMEcompilerh   	Exceptionr   r:   r#   r%   r,   r2   r   r   r   r'   r   r   r   r   <module>r      s     	  ! P P P CL, RZZIJ
	y 	
 QUCH~&*1g47BJ1+a[ QUCH~&*1g47BJ1+8HZ$89 j >3 >4S> >
 
 
 
2)@ )@X < < < gw./ AE AE AEr   