
    ցj}-                       S SK Jr  S SKrS SKrS SKrS SKJr  S SKJ	r	J
r
JrJr  \	(       a-  S SKrS SKJr  S SKJr  \R                   S:  a  S SKJr  OS SKJr  / S	QrS'S
 jr\" S5      r " S S\5      r\" S\S9rS(S jrS)S jrS*S jr        S+S jr\R8                  " S5      rS,S jrS-S jrS.S jr  " S S\!5      r" " S S\"5      r#\RH                  " SSS9 " S S 5      5       r%\RH                  " SSS9 " S! S"5      5       r&\RH                  " SSS9 " S# S$5      5       r'\RH                  " SSS9 " S% S&5      5       r(g)/    )annotationsN)Mapping)TYPE_CHECKINGAnyProtocolTypeVar)
Collection)SplitResult)      )Self)ArchiveInfoDirInfo	DirectUrlDirectUrlValidationErrorVcsInfoc                     [         $ N)__all__     N/mnt/workspace/venv-train/lib/python3.13/site-packages/packaging/direct_url.py__dir__r      s    Nr   _Tc                  (    \ rS rSr\SS j5       rSrg)_FromMappingProtocol#   c                    g r   r   clsds     r   
_from_dict_FromMappingProtocol._from_dict$   s    7:r   r   Nr!   Mapping[str, Any]returnr   )__name__
__module____qualname____firstlineno__classmethodr"   __static_attributes__r   r   r   r   r   #   s    : :r   r   _FromMappingProtocolT)boundc                F    U  VVs0 s H  u  pUc  M
  X_M     snn$ s  snnf r   r   )datakeyvalues      r   _json_dict_factoryr3   +   s"    )-C:3JCJCCCs   	c                    U R                  U5      =nc  g[        X15      (       d.  [        S[        U5      R                   SUR                   S3US9eU$ )zBGet a value from the dictionary and verify it's the expected type.NzUnexpected type z (expected )context)get
isinstancer   typer'   r!   expected_typer1   r2   s       r   _getr=   /   sd    s$e++&tE{334 5&//03
 	

 Lr   c                :    [        XU5      =nc  [        U5      eU$ )zKGet a required value from the dictionary and verify it's the expected type.)r=   _DirectUrlRequiredKeyErrorr;   s       r   _get_requiredr@   <   s$    a,,5(--Lr   c                    [        U [        U5      =nc  g UR                  U5      $ ! [         a  n[	        XBS9UeSnAff = f)zIGet a dictionary value from the dictionary and convert it to a dataclass.Nr6   )r=   r   r"   	Exceptionr   )r!   target_typer1   r2   es        r   _get_objectrE   C   sN     a#&&/>%%e,, >&q6A=>s   ( 
A
<Az.^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$c                    SU ;  a  U $ U R                  SS5      u  p#X!;   a  U $ [        R                  U5      (       a  U $ U$ )N@   )rsplit _PEP610_USER_PASS_ENV_VARS_REGEXmatch)netlocsafe_user_passwords	user_passnetloc_no_user_passs       r   _strip_auth_from_netlocrP   T   sI    
&%+]]3%:"I''--i88r   c                   [         R                  R                  U 5      n[        UR                  U5      n[         R                  R                  UR                  UUR                  UR                  UR                  45      $ )zurl with user:password part removed unless it is formed with
environment variables as specified in PEP 610, or it is a safe user:password
such as `git`.
)
urllibparseurlsplitrP   rL   
urlunsplitschemepathqueryfragment)urlrM   
parsed_urlrL   s       r   
_strip_urlr\   _   sl    
 &&s+J$Z%6%68KLF<<""OO	
 r   c                8    U R                   R                  S5      $ )N/)rW   
startswith)r[   s    r   _file_url_has_absolute_pathr`   q   s    ??%%c**r   c                  X    \ rS rSr% SrSrS\S'   S\S'   SS.     SS	 jjrSS
 jrSr	g)r   u   zKRaised when when input data is not spec-compliant.

.. versionadded:: 26.1
N
str | Noner7   strmessager6   c                   [        U[        5      (       aS  UR                  (       a*  U(       a  U SUR                   3OUR                  U l        OX l        UR                  U l        g X l        [	        U5      U l        g )N.)r9   r   r7   re   rd   )selfcauser7   s      r   __init__!DirectUrlValidationError.__init__~   s\     e566}}4;wiq0   ' ==DL"Lu:DLr   c                t    U R                   (       a  U R                   SU R                   < 3$ U R                  $ )Nz in r7   re   rh   s    r   __str__ DirectUrlValidationError.__str__   s-    <<ll^4'788||r   rm   )ri   zstr | Exceptionr7   rc   r&   None)r&   rd   )
r'   r(   r)   r*   __doc__r7   __annotations__rj   ro   r,   r   r   r   r   r   u   sC    
 GZL #	&& 	&
 
&$r   r   c                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )r?      c                "   > [         TU ]  SUS9  g )NzMissing required valuer6   )superrj   )rh   r1   	__class__s     r   rj   #_DirectUrlRequiredKeyError.__init__   s    13?r   r   )r1   rd   r&   rq   )r'   r(   r)   r*   rj   r,   __classcell__)rx   s   @r   r?   r?      s    @ @r   r?   TF)frozeninitc                  p    \ rS rSr% SrS\S'   S\S'   SrS\S'   SS	.       SS
 jjr\SS j5       r	Sr
g)r      z8The version control information of a :class:`DirectUrl`.rd   vcs	commit_idNrc   requested_revision)r   c                   [         R                  U SU5        [         R                  U SU5        [         R                  U SU5        g )Nr   r   r   object__setattr__)rh   r   r   r   s       r   rj   VcsInfo.__init__   s<     	4,4i84!57IJr   c           	     l    U " [        U[        S5      [        U[        S5      [        U[        S5      S9$ )Nr   r   r   )r   r   r   )r@   rd   r=   r   s     r   r"   VcsInfo._from_dict   s6     ae,#As,@A#AsK8
 	
r   r   )r   rd   r   rd   r   rc   r&   rq   r$   )r'   r(   r)   r*   rr   rs   r   rj   r+   r"   r,   r   r   r   r   r      se    B	HN%)
) *.	K 	K 		K
 '	K 
	K 
 
r   r   c                  T    \ rS rSr% SrSrS\S'   SS.   S
S jjr\SS j5       r	S	r
g)r      z0The archive information of a :class:`DirectUrl`.NMapping[str, str] | Nonehashesr   c               2    [         R                  U SU5        g )Nr   r   )rh   r   s     r   rj   ArchiveInfo.__init__   s    
 	462r   c                h   [        U[        S5      nUb/  [        S UR                  5        5       5      (       d
  [	        SSS9e[        U[
        S5      nUbV  SU;  a
  [	        SSS9eUR                  SS5      u  pEUc  XE0nO+XB;  a  [	        S	U< S
3SS9eX$   U:w  a  [	        S	U< S3SS9eU " US9$ )Nr   c              3  B   #    U  H  n[        U[        5      v   M     g 7fr   )r9   rd   ).0hs     r   	<genexpr>)ArchiveInfo._from_dict.<locals>.<genexpr>   s     )Vo*Q*<*<os   zHash values must be stringsr6   hash=z3Invalid hash format (expected '<algorithm>=<hash>')rH   z
Algorithm z2 used in hash field is not present in hashes fieldz7 used in hash field has different value in hashes fieldr   )r=   r   allvaluesr   rd   split)r    r!   r   legacy_hashhash_algorithm
hash_values         r   r"   ArchiveInfo._from_dict   s    a(+c)Vfmmo)V&V&V*-x  1c6*"+%.I"  *5):):3)B&N~(5 "/2$^$6 79 : ( 
 )Z72$^$6 7> ? & 
 &!!r   r   )r   r   r&   rq   r$   )r'   r(   r)   r*   rr   r   rs   rj   r+   r"   r,   r   r   r   r   r      sB    :'+F$+
 ,03 )3 
	3 " "r   r   c                  T    \ rS rSr% SrSrS\S'   SS.   S
S jjr\SS j5       r	S	r
g)r      z8The local directory information of a :class:`DirectUrl`.Nbool | Noneeditabler   c               2    [         R                  U SU5        g )Nr   r   )rh   r   s     r   rj   DirInfo.__init__   s    
 	4X6r   c                ,    U " [        U[        S5      S9$ )Nr   r   )r=   boolr   s     r   r"   DirInfo._from_dict   s    !T:.
 	
r   r   )r   r   r&   rq   r$   )r'   r(   r)   r*   rr   r   rs   rj   r+   r"   r,   r   r   r   r   r      sA    B Hk 
 !%7 7 
	7 
 
r   r   c                      \ rS rSr% SrS\S'   SrS\S'   SrS\S	'   SrS
\S'   Sr	S\S'   SSSSS.           SS jjr
\SS j5       r\SS j5       rSSSS.       SS jjrSS jrSrg)r      z;A class representing a direct URL.

.. versionadded:: 26.1
rd   rZ   NArchiveInfo | Nonearchive_infoVcsInfo | Nonevcs_infoDirInfo | Nonedir_inforc   subdirectory)r   r   r   r   c                   [         R                  U SU5        [         R                  U SU5        [         R                  U SU5        [         R                  U SU5        [         R                  U SU5        g )NrZ   r   r   r   r   r   )rh   rZ   r   r   r   r   s         r   rj   DirectUrl.__init__	  s^     	4,4>4X64X64>r   c                $   U " [        U[        S5      [        U[        S5      [        U[        S5      [        U[
        S5      [        U[        S5      S9n[        UR                  5      [        UR                  5      -   [        UR                  5      -   S:w  a  [        S5      eUR                  b]  [        R                  R                  UR                  5      nUR                   S	:w  a
  [        S
SS9e[#        U5      (       d
  [        SSS9eU$ )NrZ   r   r   r   r   )rZ   r   r   r   r   rH   z?Exactly one of vcs_info, archive_info, dir_info must be presentfilez3URL scheme must be file:// when dir_info is presentr6   z2File URL must be absolute when dir_info is present)r@   rd   rE   r   r   r   r=   r   r   r   r   r   rR   rS   rT   rZ   rV   r`   )r    r!   
direct_urlr[   s       r   r"   DirectUrl._from_dict  s	   ae,$Q^D GZ8 GZ8an5

 $$%:**+,:&&'( 	
 +Q  *..z~~>J  F*.I!  /z::.H! 
 r   c               $    U R                  U5      $ )z@Create and validate a DirectUrl instance from a JSON dictionary.)r"   r   s     r   	from_dictDirectUrl.from_dict8  s     ~~a  r   FT)git)generate_legacy_hashstrip_user_passwordrM   c               h   [         R                  " U [        S9nU(       aq  U R                  (       a`  U R                  R                  (       aE  [        [        U R                  R                  R                  5       5      5      u  pVU SU 3US   S'   U(       a  [        U R                  U5      US'   U$ )a>  Convert the DirectUrl instance to a JSON dictionary.

:param generate_legacy_hash: If True, include a legacy `hash` field in
    `archive_info` for backward compatibility with tools that don't
    support the `hashes` field.
:param strip_user_password: If True, strip user:password from the URL
    unless it is formed with environment variables as specified in PEP
    610, or it is a safe user:password such as `git`.
:param safe_user_passwords: A collection of user:password strings that
    should not be stripped from the URL even if `strip_user_password` is
    True.
)dict_factoryr   r   r   rZ   )
dataclassesasdictr3   r   r   nextiteritemsr\   rZ   )rh   r   r   rM   resr   r   s          r   to_dictDirectUrl.to_dict=  s    &   4FGD$5$5$:K:K:R:R)-d43D3D3K3K3Q3Q3S.T)U&N-;,<Aj\*JC'#DHH.ABCJ
r   c                B    U R                  U R                  5       5        g)zqValidate the DirectUrl instance against the specification.

Raises :class:`DirectUrlValidationError` if invalid.
N)r   r   rn   s    r   validateDirectUrl.validateX  s    
 	t||~&r   r   )rZ   rd   r   r   r   r   r   r   r   rc   r&   rq   r$   )r   r   r   r   rM   Collection[str]r&   r%   )r&   rq   )r'   r(   r)   r*   rr   rs   r   r   r   r   rj   r+   r"   r   r   r   r,   r   r   r   r   r      s    
 
H'+L$+#Hn##Hn##L*# ,0#'#'#'? ? )	?
 !? !? !? 
?  > ! ! &+$(/7 # "	
 - 
6'r   r   )r&   z	list[str])r0   zlist[tuple[str, Any]]r&   zdict[str, Any])r!   r%   r<   type[_T]r1   rd   r&   z	_T | None)r!   r%   r<   r   r1   rd   r&   r   )r!   r%   rC   ztype[_FromMappingProtocolT]r1   rd   r&   z_FromMappingProtocolT | None)rL   rd   rM   r   r&   rd   )rZ   rd   rM   r   r&   rd   )r[   r
   r&   r   ))
__future__r   r   reurllib.parserR   collections.abcr   typingr   r   r   r   sysr	   r
   version_infor   typing_extensionsr   r   r   r   r-   r3   r=   r@   rE   compilerJ   rP   r\   r`   rB   r   r?   	dataclassr   r   r   r   r   r   r   <module>r      s~   "  	  # 8 8*(
7"* T];8 ;
   7?ST D
	>	>'B	>IL	>!	> $&::5$  
$+y B@!9 @
 d/
 
 0
8 d/," ," 0,"^ d/
 
 0
& d/`' `' 0`'r   