+
    <j=Q                         ^ 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                      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           	     :   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: %sNwz	--version)stdoutstderr)httphttps)gpggpg2)DEFAULT_INDEXurlread_configurationr   r   password_handlerssl_verifierr   gpg_homeopenosdevnull
subprocess
check_callOSError)selfr   schemenetlocpathparamsqueryfragsinksrcs   &&         N/opt/headortail/venv/lib/python3.14/site-packages/pip/_vendor/distlib/index.py__init__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                    ^RI Hp V! 4       # )z[
Get the distutils command for interacting with PyPI configurations.
:return: the command.
)_get_pypirc_command)utilr2   )r$   cmds   & r.   r2    PackageIndex._get_pypirc_commandB   s    
 	5u    c                    ^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   
repositoryN)r3   r8   getr9   r:   r;   r   )r$   r8   cfgs   &  r.   r   PackageIndex.read_configurationJ   sY     	'4 
+
+WWWf-
77<2r6   c                B    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_credentialsr3   rA   )r$   rA   s   & r.   save_configurationPackageIndex.save_configurationW   s    
 	 'dr6   c                    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)
r9   r:   r   r   r   r   add_passwordr;   r   r   )r$   pm_r&   s   &   r.   rB   PackageIndex.check_credentials`   sm    
 == DMM$9"#FGG ( 21aA


FMM4==I 4R 8r6   c                :   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.
verify:actionsubmit)rB   validatetodictencode_requestitemssend_request)r$   metadatadrequests   &&  r.   registerPackageIndex.registerl   s     	 OO)%%aggi4'")%%aggi4  ))r6   c                     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)readlinedecoderstripappendloggerdebugclose)r$   namestreamoutbufr,   s   &&&& r.   _readerPackageIndex._reader   sV     !A!((*AMM!LLT1-.r6   c           	        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-fd0)r   r   extendtempfilemkdtempr   r'   joinbasenamer^   r_   )r$   filenamesignersign_passwordkeystorer4   tdsfs   &&&&&   r.   get_sign_command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r6   c                h   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)targetargs)r!   PIPEPopenr   rd   r   startr   r|   writer`   waitrq   
returncode)	r$   r4   
input_datakwargsr   r   pt1t2s	   &&&      r.   run_commandPackageIndex.run_command   s     joojoo
 !(ooF7OS+F+ 4<<x6.JK

4<<x6.JK

!GGMM*%GGMMO	
	
	||V++r6   c                    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.
rY   z&sign command failed with error code %s)ry   r   encoder   )
r$   rs   rt   ru   rv   r4   sig_filer-   r   r   s
   &&&&&     r.   	sign_filePackageIndex.sign_file   si     --h.68!--c.;.B.B7.KMF7" $-/1$2 3 3r6   c                   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 signedrbrL   file_uploadprotocol_version1filetype	pyversion
md5_digestsha256_digestcontentgpg_signature)rB   r   r'   existsr   rN   rO   r   r^   warningr   r   readhashlibmd5	hexdigestsha256updaterr   r]   shutilrmtreedirnamerP   rQ   rR   )r$   rS   rs   rt   ru   r   r   rv   rT   r   f	file_datar   r   filessig_datarU   s   &&&&&&&&         r.   upload_file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                   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: %rra   versionr   )rL   
doc_upload)rB   r   r'   isdirr   rq   r   rN   ra   r   r   getvaluerP   rR   )
r$   rS   doc_dirfnra   r   zip_datafieldsr   rU   s
   &&&       r.   upload_documentation!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  ))r6   c                    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`.
rg   rh   ri   rj   z--verifyrk   rl   )r   r   rn   r^   r_   rq   )r$   signature_filenamedata_filenamerv   r4   s   &&&& r.   get_verify_commandPackageIndex.get_verify_command=  sf     xxZ8}}HJJX./

J 2BC^SXXc]3
r6   c                    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      )r   r   r   r   )r$   r   r   rv   r4   r-   r   r   s   &&&&    r.   verify_signaturePackageIndex.verify_signatureU  sm     xxx" $1 2 2%%&8&.0!--c2FV"#MPR#RSSQwr6   c           	        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: %swbi    zcontent-lengthzContent-Lengthz1retrieval incomplete: got only %d out of %d bytesz digest mismatch for z: expected z, got zDigest verified: %s)r^   r_   
isinstancelisttuplegetattrr   r   rR   r   infointr   lenr   r   r`   r   r   )r$   r   destfiledigest
reporthookdigesterhasherdfpsfpheaders	blocksizesizer   blocknumblockactuals   &&&&&           r.   download_file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                    . 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   r]   r   r	   r   )r$   reqhandlersopeners   &&  r.   rR   PackageIndex.send_request  s^        OOD112OOD--.x({{3r6   c           
     X   . 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"rY   r6   z&Content-Disposition: form-data; name="z"; filename=""s   
s   multipart/form-data; boundary=zContent-typezContent-length)boundaryr   r   r   rn   r   rq   strr   r   r   )r$   r   r   partsr   kvaluesvkeyrs   valuebodyctr   s   &&&           r.   rP   PackageIndex.encode_request  s     ==IAftUm44 H$@wHHW%' ( 	   %* C5LL x!"(&/  %* 	eh&.45||E".9Bc#d)n
 txx//r6   c                    \        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)ra   g      @)timeoutandr`   )r   r
   r   r   search)r$   termsoperator	rpc_proxys   &&& r.   r   PackageIndex.search  sZ    e\**UOE#6		!##E+<+<u=g Ig s   A A A*)r   r   r:   r   r;   r   r   r9   )N)NNsdistsourceN)NN)__name__
__module____qualname____firstlineno____doc__r   r/   r2   r   rC   rB   rV   rd   ry   r   r   r   r   r   r   r   rR   rP   r   __static_attributes____classdictcell__)__classdict__s   @r.   r   r      sv     
 AH:3
9*($8!,F.7*r*800K8Z  )0V! !r6   r   )r   loggingr   r   r!   ro   	threadingr   ImportErrordummy_threading r   compatr   r   r   r   r	   r
   r3   r   r   	getLoggerr   r^   r   DEFAULT_REALMobjectr    r6   r.   <module>r     so      	   '  ; ; &			8	$'_!6 _!  '&'s   A! !A10A1