+
     h=Q  c                   s    ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt ^ RIHt ^RI
Ht ^RIHtHtHtHtHtHt ^RIHtHt ]P,                  ! ]4      tRtRt ! R R	]4      tR#   ] d
    ^ RI	Ht  LPi ; i)
    N)Thread)DistlibException)HTTPBasicAuthHandlerRequestHTTPPasswordMgrurlparsebuild_openerstring_types)zip_dirServerProxyzhttps://pypi.org/pypipypic                   s   a  ] tR t^t o RtRtRR ltR tR tR t	R t
R	 tR
 tRR ltRR ltRR ltRR ltR tRR ltRR ltRR ltR tR tRR ltRtV tR# )PackageIndexzW
This class represents a package index compatible with PyPI, the Python
Package Index.
s.   ----------ThIs_Is_tHe_distlib_index_bouNdaRY_$Nc           	     s:   T;'       g    \         V n        V P                  4        \        V P                  4      w  r#rErgV'       g   V'       g   V'       g   VR9  d   \	        RV P                  ,          4      hRV n        RV n        RV n        RV n        \        \        P                  R4      ;_uu_ 4       pR F.  p	 \        P                  ! V	R.VVR7      p
V
^ 8X  d	   Wn         MK0  	  RRR4       R#   \         d     KJ  i ; i  + '       g   i     R# ; i)zt
Initialise an instance.

:param url: The URL of the index. If not specified, the URL for PyPI is
            used.
zinvalid repository: %sNZwz	--version)stdoutstderr)ZhttpZhttps)gpgZgpg2)DEFAULT_INDEXurlread_configurationr   r   password_handlerssl_verifierr   gpg_homeopenosZdevnull
subprocessZ
check_callZOSError)selfr   ZschemenetlocpathZparamsZqueryZfragZsinksrcs   &&         >/usr/lib/python3.14/site-packages/pip/_vendor/distlib/index.py__init__ZPackageIndex.__init__%   s     ''-!4<TXX4F1eUdf4E&E"#;dhh#FGG $ "**c""d %#..;/?6:<BQw#$ 	 % #"   #""s0   8D	?(C7'D	7D	D	D	D		D	c                s    ^RI Hp V! 4       # )z[
Get the distutils command for interacting with PyPI configurations.
:return: the command.
)_get_pypirc_command)utilr    )r   cmd   & r   r    Z PackageIndex._get_pypirc_commandB   s    
 	5u    c                s    ^RI Hp V! V 4      pVP                  R4      V n        VP                  R4      V n        VP                  RR4      V n        VP                  RV P                  4      V n        R# )z
Read the PyPI access configuration as supported by distutils. This populates
``username``, ``password``, ``realm`` and ``url`` attributes from the
configuration.
)_load_pypircusernamepasswordrealmr   Z
repositoryN)r!   r%   Zgetr&   r'   r(   r   )r   r%   Zcfgs   &  r   r   ZPackageIndex.read_configurationJ   sY     	'4 
+
+WWWf-
77<2r$   c                sB    V P                  4        ^RIHp V! V 4       R# )z|
Save the PyPI access configuration. You must have set ``username`` and
``password`` attributes before calling this method.
)_store_pypircN)check_credentialsr!   r)   )r   r)   r#   r   save_configurationZPackageIndex.save_configurationW   s    
 	 'dr$   c                s    V P                   e   V P                  f   \        R4      h\        4       p\	        V P
                  4      w  r#   pVP                  V P                  W0P                   V P                  4       \        V4      V n	        R# )zX
Check that ``username`` and ``password`` have been set, and raise an
exception if not.
Nz!username and password must be set)
r&   r'   r   r   r   r   Zadd_passwordr(   r   r   )r   ZpmZ_r   s   &   r   r*   ZPackageIndex.check_credentials`   sm    
 == DMM$9"#FGG ( 21aA


FMM4==I 4R 8r$   c                s:   V P                  4        VP                  4        VP                  4       pRVR&   V P                  VP	                  4       . 4      pV P                  V4       RVR&   V P                  VP	                  4       . 4      pV P                  V4      # )a9  
Register a distribution on PyPI, using the provided metadata.

:param metadata: A :class:`Metadata` instance defining at least a name
                 and version number for the distribution to be
                 registered.
:return: The HTTP response received from PyPI upon submission of the
        request.
Zverify:actionZsubmit)r*   validatetodictencode_requestitemssend_request)r   metadatadrequest   &&  r   registerZPackageIndex.registerl   s     	 OO)%%aggi4'")%%aggi4  ))r$   c                s     VP                  4       pV'       g   MNVP                  R4      P                  4       pVP                  V4       \        P                  V: RV: 24       Kh  VP                  4        R# )aB  
Thread runner for reading lines of from a subprocess into a buffer.

:param name: The logical name of the stream (used for logging only).
:param stream: The stream to read from. This will typically a pipe
               connected to the output stream of a subprocess.
:param outbuf: The list to append the read lines to.
utf-8z: N)ZreadlineZdecodeZrstripappendloggerdebugclose)r   nameZstreamZoutbufr      &&&& r   _readerZPackageIndex._reader   sV     !A!((*AMM!LLT1-.r$   c           	     s   V P                   RRR.pVf   V P                  pV'       d   VP                  RV.4       Ve   VP                  . RO4       \        P                  ! 4       p\
        P                  P                  V\
        P                  P                  V4      R,           4      pVP                  RRRVR	Wq.4       \        P                  R
RP                  V4      4       WW3# )a1  
Return a suitable command for signing a file.

:param filename: The pathname to the file to be signed.
:param signer: The identifier of the signer of the file.
:param sign_password: The passphrase for the signer's
                      private key used for signing.
:param keystore: The path to a directory which contains the keys
                 used in verification. If not specified, the
                 instance's ``gpg_home`` attribute is used instead.
:return: The signing command as a list suitable to be
         passed to :class:`subprocess.Popen`.
--status-fd2--no-tty	--homedirz.ascz--detach-signz--armorz--local-userz--outputinvoking: %s )z--batchz--passphrase-fdZ0)r   r   extendtempfileZmkdtempr   r   joinbasenamer9   r:   )r   filenamesignersign_passwordkeystorer"   ZtdZsfs   &&&&&   r   get_sign_commandZPackageIndex.get_sign_command   s     xxZ8}}HJJX./$JJ:;WW\\"bgg..x86AB

OYJ6 	7^SXXc]3wr$   c                sh   R\         P                  R\         P                  /pVe   \         P                  VR&   . p. p\         P                  ! V3/ VB p\        V P                  RVP
                  V3R7      pVP                  4        \        V P                  RVP                  V3R7      pVP                  4        Ve6   VP                  P                  V4       VP                  P                  4        VP                  4        VP                  4        VP                  4        VP                  WE3# )a  
Run a command in a child process , passing it any input data specified.

:param cmd: The command to run.
:param input_data: If specified, this must be a byte string containing
                   data to be sent to the child process.
:return: A tuple consisting of the subprocess' exit code, a list of
         lines read from the subprocess' ``stdout``, and a list of
         lines read from the subprocess' ``stderr``.
r   r   stdin)ZtargetZargs)r   ZPIPEZPopenr   r>   r   Zstartr   rN   writer;   ZwaitrG   Z
returncode)	r   r"   Z
input_dataZkwargsr   r   ZpZt1Zt2s	   &&&      r   run_commandZPackageIndex.run_command   s     joojoo
 !(ooF7OS+F+ 4<<x6.JK

4<<x6.JK

!GGMM*%GGMMO	
	
	||V++r$   c                s    V P                  WVV4      w  rVV P                  VVP                  R4      4      w  rxp	V^ 8w  d   \        RV,          4      hV# )a  
Sign a file.

:param filename: The pathname to the file to be signed.
:param signer: The identifier of the signer of the file.
:param sign_password: The passphrase for the signer's
                      private key used for signing.
:param keystore: The path to a directory which contains the keys
                 used in signing. If not specified, the instance's
                 ``gpg_home`` attribute is used instead.
:return: The absolute pathname of the file where the signature is
         stored.
r7   z&sign command failed with error code %s)rM   rP   encoder   )
r   rI   rJ   rK   rL   r"   sig_filer   r   r   s
   &&&&&     r   	sign_fileZPackageIndex.sign_file   si     --h.68!--c.;.B.B7.KMF7" $-/1$2 3 3r$   c                s   V P                  4        \        P                  P                  V4      '       g   \	        RV,          4      hVP                  4        VP                  4       pRp	V'       d<   V P                  '       g   \        P                  R4       MV P                  W#VV4      p	\        VR4      ;_uu_ 4       p
V
P                  4       pRRR4       \        P                  ! X4      P                  4       p\        P                   ! V4      P                  4       pVP#                  RRRRR	VR
VRVRV/4       R\        P                  P%                  V4      V3.pV	'       d   \        V	R4      ;_uu_ 4       p
V
P                  4       pRRR4       VP'                  R\        P                  P%                  V	4      X34       \(        P*                  ! \        P                  P-                  V	4      4       V P/                  VP1                  4       V4      pV P3                  V4      #   + '       g   i     ELc; i  + '       g   i     L; i)a  
Upload a release file to the index.

:param metadata: A :class:`Metadata` instance defining at least a name
                 and version number for the file to be uploaded.
:param filename: The pathname of the file to be uploaded.
:param signer: The identifier of the signer of the file.
:param sign_password: The passphrase for the signer's
                      private key used for signing.
:param filetype: The type of the file being uploaded. This is the
                distutils command which produced that file, e.g.
                ``sdist`` or ``bdist_wheel``.
:param pyversion: The version of Python which the release relates
                  to. For code compatible with any Python, this would
                  be ``source``, otherwise it would be e.g. ``3.2``.
:param keystore: The path to a directory which contains the keys
                 used in signing. If not specified, the instance's
                 ``gpg_home`` attribute is used instead.
:return: The HTTP response received from PyPI upon submission of the
        request.
znot found: %sNz)no signing program available - not signedZrbr,   Zfile_uploadZprotocol_versionZ1filetype	pyversion
md5_digestsha256_digestcontentZgpg_signature)r*   r   r   existsr   r-   r.   r   r9   ZwarningrS   r   readhashlibmd5	hexdigestZsha256updaterH   r8   shutilZrmtreeZdirnamer/   r0   r1   )r   r2   rI   rJ   rK   rT   rU   rL   r3   rR   ZfZ	file_datarV   rW   filesZsig_datar4   s   &&&&&&&&         r   upload_fileZPackageIndex.upload_file   s   . 	 ww~~h''"?X#=>>OO888JK>>(M*24(D!!QI "[[+557
y1;;=	}*]
 	 RWW--h7CDh%%668 &LL/277+;+;H+E!# $MM"''//(34%%aggi7  ))) "!! &%s   H,>I ,H=	 I	c                s   V P                  4        \        P                  P                  V4      '       g   \	        RV,          4      h\        P                  P                  VR4      p\        P                  P                  V4      '       g   \	        RV,          4      hVP                  4        VP                  VP                  rT\        V4      P                  4       pRRV3RV3.pRWF3.pV P                  Wx4      p	V P                  V	4      # )a  
Upload documentation to the index.

:param metadata: A :class:`Metadata` instance defining at least a name
                 and version number for the documentation to be
                 uploaded.
:param doc_dir: The pathname of the directory which contains the
                documentation. This should be the directory that
                contains the ``index.html`` for the documentation.
:return: The HTTP response received from PyPI upon submission of the
        request.
znot a directory: %rz
index.htmlznot found: %rr<   versionrX   )r,   Z
doc_upload)r*   r   r   Zisdirr   rG   rY   r-   r<   rb   r	   Zgetvaluer/   r1   )
r   r2   Zdoc_dirZfnr<   rb   Zzip_datafieldsr`   r4   s
   &&&       r   upload_documentationZ!PackageIndex.upload_documentation!  s     	 ww}}W%%"#87#BCCWW\\'<0ww~~b!!"?R#788 x'7'7g7#,,.+4.9g"68T,-%%f4  ))r$   c                s    V P                   RRR.pVf   V P                  pV'       d   VP                  RV.4       VP                  RW.4       \        P	                  RRP                  V4      4       V# )a$  
Return a suitable command for verifying a file.

:param signature_filename: The pathname to the file containing the
                           signature.
:param data_filename: The pathname to the file containing the
                      signed data.
:param keystore: The path to a directory which contains the keys
                 used in verification. If not specified, the
                 instance's ``gpg_home`` attribute is used instead.
:return: The verifying command as a list suitable to be
         passed to :class:`subprocess.Popen`.
r?   r@   rA   rB   z--verifyrC   rD   )r   r   rE   r9   r:   rG   )r   signature_filenamedata_filenamerL   r"   r=   r   get_verify_commandZPackageIndex.get_verify_command=  sf     xxZ8}}HJJX./

J 2BC^SXXc]3
r$   c                s    V P                   '       g   \        R4      hV P                  WV4      pV P                  V4      w  rVpVR9  d   \        RV,          4      hV^ 8H  # )a  
Verify a signature for a file.

:param signature_filename: The pathname to the file containing the
                           signature.
:param data_filename: The pathname to the file containing the
                      signed data.
:param keystore: The path to a directory which contains the keys
                 used in verification. If not specified, the
                 instance's ``gpg_home`` attribute is used instead.
:return: True if the signature was verified, else False.
z0verification unavailable because gpg unavailablez(verify command failed with error code %s)r    i   )r   r   rg   rP   )r   re   rf   rL   r"   r   r   r   s   &&&&    r   verify_signatureZPackageIndex.verify_signatureU  sm     xxx" $1 2 2%%&8&.0!--c2FV"#MPR#RSSQwr$   c           	     s   Vf   Rp\         P                  R4       MT\        V\        \        34      '       d   Vw  rcMRp\        \        V4      ! 4       p\         P                  RV,          4       \        VR4      ;_uu_ 4       pV P                  \        V4      4      p VP                  4       p	Rp
Rp^ p^ pRV	9   d   \        V	R,          4      pV'       d
   V! WV4        VP                  V
4      pV'       g   MZV\        V4      ,          pVP                  V4       V'       d   VP                  V4       V^,          pV'       g   Kj  V! WV4       Ku  VP!                  4         RRR4       X^ 8  d   XV8  d   \#        R	W3,          4      hV'       dI   VP%                  4       pW?8w  d   \#        X: R
V: RV: RV: 24      h\         P                  RV4       R# R#   TP!                  4        i ; i  + '       g   i     L; i)a  
This is a convenience method for downloading a file from an URL.
Normally, this will be a file from the index, though currently
no check is made for this (i.e. a file can be downloaded from
anywhere).

The method is just like the :func:`urlretrieve` function in the
standard library, except that it allows digest computation to be
done during download and checking that the downloaded data
matched any expected value.

:param url: The URL of the file to be downloaded (assumed to be
            available via an HTTP GET request).
:param destfile: The pathname where the downloaded file is to be
                 saved.
:param digest: If specified, this must be a (hasher, value)
               tuple, where hasher is the algorithm used (e.g.
               ``'md5'``) and ``value`` is the expected value.
:param reporthook: The same as for :func:`urlretrieve` in the
                   standard library.
NzNo digest specifiedr\   zDigest specified: %sZwbi    zcontent-lengthzContent-Lengthz1retrieval incomplete: got only %d out of %d bytesz digest mismatch for z: expected z, got zDigest verified: %si)r9   r:   
isinstancelisttupleZgetattrr[   r   r1   r   ZinfoZintrZ   lenrO   r^   r;   r   r]   )r   r   ZdestfileZdigestZ
reporthookZdigesterZhasherZdfpZsfpheadersZ	blocksizeZsizerZ   ZblocknumZblockZactuals   &&&&&           r   download_fileZPackageIndex.download_filem  s   , >HLL./&4-00!'w/1HLL/&89 (D!!S ##GCL1C((* 	#w.w'789DxD9HHY/E CJ&DIIe$ .MH!z"8=		5 ": 19"C,    '')F&7=x7=v(G H H LL.7  		5 "!s7   G9!8G$"G$=AG$G$G9$G66G99H		c                s    . pV P                   '       d   VP                  V P                   4       V P                  '       d   VP                  V P                  4       \        V!  pVP	                  V4      # )z
Send a standard library :class:`Request` to PyPI and return its
response.

:param req: The request to send.
:return: The HTTP response from PyPI (a standard library HTTPResponse).
)r   r8   r   r   r   )r   ZreqZhandlersZopenerr5   r   r1   ZPackageIndex.send_request  s^        OOD112OOD--.x({{3r$   c           
     sX   . pV P                   pV Fn  w  rV\        V\        \        34      '       g   V.pV FD  pVP	                  RV,           RV,          P                  R4      RVP                  R4      34       KF  	  Kp  	  V F:  w  rp
VP	                  RV,           RV: RV	: R2P                  R4      RV
34       K<  	  VP	                  RV,           R,           R34       RP                  V4      pR	V,           pR
VR\        \        V4      4      /p\        V P                  W4      # )z
Encode fields and files for posting to an HTTP server.

:param fields: The fields to send as a list of (fieldname, value)
               tuples.
:param files: The files to send as a list of (fieldname, filename,
              file_bytes) tuple.
s   --z)Content-Disposition: form-data; name="%s"r7   r$   z&Content-Disposition: form-data; name="z"; filename="Z"s   
s   multipart/form-data; boundary=zContent-typezContent-length)boundaryri   rj   rk   rE   rQ   rG   Zstrrl   r   r   )r   rc   r`   Zpartsro   ZkZvaluesZvZkeyrI   ZvalueZbodyZctrm   s   &&&           r   r/   ZPackageIndex.encode_request  s     ==IAftUm44 H$@wHHW%' ( 	   %* C5LL x!"(&/  %* 	eh&.45||E".9Bc#d)n
 txx//r$   c                s    \        V\        4      '       d   R V/p\        V P                  RR7      p TP	                  Y;'       g    R4      V! R4      ! 4        #   T! R4      ! 4        i ; i)r<   g      @)ZtimeoutZandr;   )ri   r   r
   r   search)r   ZtermsZoperatorZ	rpc_proxys   &&& r   rp   ZPackageIndex.search  sZ    e\**UOE#6		!##E+<+<u=g Ig s   A A A*)r   r   r'   r   r(   r   r   r&   )N)NNZsdistZsourceN)NN)__name__Z
__module__Z__qualname__Z__firstlineno__Z__doc__ro   r   r    r   r+   r*   r6   r>   rM   rP   rS   ra   rd   rg   rh   rn   r1   r/   rp   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r   r      sv     
 AH:3
9*($8!,F.7*r*800K8Z  )0V! !r$   r   )r[   Zloggingr   r_   r   rF   Z	threadingr   ZImportErrorZdummy_threadingZ r   Zcompatr   r   r   r   r   r   r!   r	   r
   Z	getLoggerrq   r9   r   ZDEFAULT_REALMZobjectr   ) r$   r   <module>rr      so      	   '  ; ; &			8	$'_!6 _!  '&'s   A! !A10A1