HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/lib/python3.9/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-39.pyc
a

?�fJR�@s�ddlZddlZddlZddlZddlZddlZzddlmZWney^ddl	mZYn0ddl
mZddlm
Z
mZmZmZmZmZddlmZmZmZe�e�ZdZdZGd	d
�d
e�ZdS)�N)�Thread�)�DistlibException)�HTTPBasicAuthHandler�Request�HTTPPasswordMgr�urlparse�build_opener�string_types)�cached_property�zip_dir�ServerProxyzhttps://pypi.org/pypi�pypic@s�eZdZdZdZd*dd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zd+dd�Zd,dd�Z
d-dd�Zd.dd�Zdd�Zd/dd�Zd0d d!�Zd1d"d#�Zd$d%�Zd&d'�Zd2d(d)�ZdS)3�PackageIndexzc
    This class represents a package index compatible with PyPI, the Python
    Package Index.
    s.----------ThIs_Is_tHe_distlib_index_bouNdaRY_$Nc
Cs�|pt|_|��t|j�\}}}}}}|s<|s<|s<|dvrJtd|j��d|_d|_d|_d|_t	t
jd��Z}dD]D}	z,tj
|	dg||d�}
|
dkr�|	|_Wq�Wqtty�Yqt0qtWd�n1s�0YdS)	z�
        Initialise an instance.

        :param url: The URL of the index. If not specified, the URL for PyPI is
                    used.
        )�http�httpszinvalid repository: %sN�w)�gpgZgpg2z	--version��stdout�stderrr)�
DEFAULT_INDEX�url�read_configurationrr�password_handler�ssl_verifierr�gpg_home�open�os�devnull�
subprocessZ
check_call�OSError)�selfr�scheme�netloc�path�params�query�fragZsink�s�rc�r+�=/usr/lib/python3.9/site-packages/pip/_vendor/distlib/index.py�__init__$s(
�
zPackageIndex.__init__cCs&ddlm}ddlm}|�}||�S)zs
        Get the distutils command for interacting with PyPI configurations.
        :return: the command.
        r)�Distribution)�
PyPIRCCommand)Zdistutils.corer.Zdistutils.configr/)r"r.r/�dr+r+r,�_get_pypirc_commandAsz PackageIndex._get_pypirc_commandcCsR|��}|j|_|��}|�d�|_|�d�|_|�dd�|_|�d|j�|_dS)z�
        Read the PyPI access configuration as supported by distutils, getting
        PyPI to do the actual work. This populates ``username``, ``password``,
        ``realm`` and ``url`` attributes from the configuration.
        �username�password�realmr�
repositoryN)r1rr5Z_read_pypirc�getr2r3r4)r"�cZcfgr+r+r,rKszPackageIndex.read_configurationcCs$|��|��}|�|j|j�dS)z�
        Save the PyPI access configuration. You must have set ``username`` and
        ``password`` attributes before calling this method.

        Again, distutils is used to do the actual work.
        N)�check_credentialsr1Z
_store_pypircr2r3)r"r7r+r+r,�save_configurationZszPackageIndex.save_configurationcCs\|jdus|jdurtd��t�}t|j�\}}}}}}|�|j||j|j�t|�|_	dS)zp
        Check that ``username`` and ``password`` have been set, and raise an
        exception if not.
        Nz!username and password must be set)
r2r3rrrrZadd_passwordr4rr)r"Zpm�_r$r+r+r,r8fszPackageIndex.check_credentialscCs\|��|��|��}d|d<|�|��g�}|�|�}d|d<|�|��g�}|�|�S)aq
        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.
        Zverify�:actionZsubmit)r8�validate�todict�encode_request�items�send_request)r"�metadatar0�requestZresponser+r+r,�registerrs

zPackageIndex.registercCsF|��}|sq:|�d���}|�|�t�d||f�q|��dS)ar
        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%s: %sN)�readline�decode�rstrip�append�logger�debug�close)r"�name�streamZoutbufr)r+r+r,�_reader�s

zPackageIndex._readerc	Cs�|jdddg}|dur|j}|r.|�d|g�|durD|�gd��t��}tj�|tj�|�d�}|�dd	d
|d||g�t	�
dd
�|��||fS)a�
        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-ttyN�	--homedir)z--batchz--passphrase-fd�0z.ascz
--detach-signz--armorz--local-userz--output�invoking: %s� )rr�extend�tempfileZmkdtemprr%�join�basenamerIrJ)r"�filename�signer�
sign_password�keystore�cmdZtdZsfr+r+r,�get_sign_command�s
�zPackageIndex.get_sign_commandc	Cs�tjtjd�}|dur tj|d<g}g}tj|fi|��}t|jd|j|fd�}|��t|jd|j|fd�}|��|dur�|j�	|�|j�
�|��|��|��|j
||fS)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``.
        rN�stdinr)�target�argsr)r �PIPE�PopenrrNr�startrr`�writerK�waitrX�
returncode)	r"r^Z
input_data�kwargsrr�p�t1�t2r+r+r,�run_command�s&�

zPackageIndex.run_commandc
CsD|�||||�\}}|�||�d��\}}}	|dkr@td|��|S)aR
        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.
        rDrz&sign command failed with error code %s)r_rm�encoder)
r"rZr[r\r]r^�sig_filer*rrr+r+r,�	sign_file�s
��
�zPackageIndex.sign_file�sdist�sourcec	CsR|��tj�|�s td|��|��|��}d}	|rZ|jsJt�	d�n|�
||||�}	t|d��}
|
��}Wd�n1s�0Yt
�|���}t
�|���}
|�dd||||
d��dtj�|�|fg}|	�r8t|	d��}
|
��}Wd�n1�s0Y|�d	tj�|	�|f�t�tj�|	��|�|��|�}|�|�S)
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�rbZfile_upload�1)r;Zprotocol_version�filetype�	pyversion�
md5_digest�
sha256_digest�contentZ
gpg_signature)r8rr%�existsrr<r=rrIZwarningrpr�read�hashlib�md5�	hexdigestZsha256�updaterYrH�shutilZrmtree�dirnamer>r?r@)r"rArZr[r\rurvr]r0ro�fZ	file_datarwrx�filesZsig_datarBr+r+r,�upload_file�sD
�&�(�zPackageIndex.upload_filec
Cs�|��tj�|�s td|��tj�|d�}tj�|�sFtd|��|��|j|j	}}t
|���}dd|fd|fg}d||fg}|�||�}	|�
|	�S)a2
        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.
        znot a directory: %rz
index.htmlz
not found: %r)r;Z
doc_uploadrL�versionry)r8rr%�isdirrrXrzr<rLr�r�getvaluer>r@)
r"rAZdoc_dir�fnrLr�Zzip_data�fieldsr�rBr+r+r,�upload_documentation(s
�z!PackageIndex.upload_documentationcCsT|jdddg}|dur|j}|r.|�d|g�|�d||g�t�dd�|��|S)	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`.
        rOrPrQNrRz--verifyrTrU)rrrVrIrJrX)r"�signature_filename�
data_filenamer]r^r+r+r,�get_verify_commandDszPackageIndex.get_verify_commandcCsH|jstd��|�|||�}|�|�\}}}|dvr@td|��|dkS)a6
        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 unavailable)rrz(verify command failed with error code %sr)rrr�rm)r"r�r�r]r^r*rrr+r+r,�verify_signature\s��zPackageIndex.verify_signaturec	Cs�|durd}t�d�n6t|ttf�r0|\}}nd}tt|��}t�d|�t|d���}|�t	|��}z�|�
�}	d}
d}d}d}
d	|	vr�t|	d
�}|r�||
|
|�|�|
�}|s�q�|t
|�7}|�|�|r�|�|�|
d7}
|r�||
|
|�q�W|��n
|��0Wd�n1�s 0Y|dk�rN||k�rNtd||f��|�r�|��}||k�rztd
||||f��t�d|�dS)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.
        NzNo digest specifiedr}zDigest specified: %s�wbi ���rzcontent-lengthzContent-Lengthrz1retrieval incomplete: got only %d out of %d bytesz.%s digest mismatch for %s: expected %s, got %szDigest verified: %s)rIrJ�
isinstance�list�tuple�getattrr|rr@r�info�intr{�lenrfrrKrr~)r"rZdestfile�digestZ
reporthookZdigesterZhasherZdfpZsfp�headersZ	blocksize�sizer{Zblocknum�block�actualr+r+r,�
download_fileus\



4��
��zPackageIndex.download_filecCs:g}|jr|�|j�|jr(|�|j�t|�}|�|�S)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).
        )rrHrr	r)r"Zreq�handlers�openerr+r+r,r@�szPackageIndex.send_requestc
Cs�g}|j}|D]L\}}t|ttf�s*|g}|D]*}|�d|d|�d�d|�d�f�q.q|D].\}}	}
|�d|d||	f�d�d|
f�q`|�d|ddf�d�|�}d|}|tt|��d�}
t	|j
||
�S)	a&
        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"rD�z8Content-Disposition: form-data; name="%s"; filename="%s"s
smultipart/form-data; boundary=)zContent-typezContent-length)�boundaryr�r�r�rVrnrX�strr�rr)r"r�r��partsr��k�values�v�keyrZ�value�bodyZctr�r+r+r,r>�sD���
���

�zPackageIndex.encode_requestcCsNt|t�rd|i}t|jdd�}z|�||p.d�W|d��S|d��0dS)NrLg@)Ztimeout�andrK)r�r
r
r�search)r"Zterms�operatorZ	rpc_proxyr+r+r,r��s

�zPackageIndex.search)N)N)N)N)NNrqrrN)N)N)NN)N)�__name__�
__module__�__qualname__�__doc__r�r-r1rr9r8rCrNr_rmrpr�r�r�r�r�r@r>r�r+r+r+r,rs2

�

#
�
9�
�

M+r)r|Zloggingrr�r rWZ	threadingr�ImportErrorZdummy_threading�r�compatrrrrr	r
�utilrrr
Z	getLoggerr�rIrZ
DEFAULT_REALM�objectrr+r+r+r,�<module>s