� ��^iQ����ddlZddlZddlZddlZddlZddlZ ddlmZn#e$r ddl mZYnwxYwddl m Z ddl m Z mZmZmZmZmZddlmZmZeje��ZdZdZGd �d e��ZdS) �N)�Thread�)�DistlibException)�HTTPBasicAuthHandler�Request�HTTPPasswordMgr�urlparse� build_opener� string_types)�zip_dir� ServerProxyzhttps://pypi.org/pypi�pypic��eZdZdZdZdd�Zd�Zd�Zd�Zd�Z d �Z d �Z dd �Z dd �Z dd �Z dd�Zd�Z dd�Z dd�Zdd�Zd�Zd�Zdd�ZdS)� PackageIndexzc This class represents a package index compatible with PyPI, the Python Package Index. s.----------ThIs_Is_tHe_distlib_index_bouNdaRY_$Nc���|pt|_|���t|j��\}}}}}}|s|s|s|dvrt d|jz���d|_d|_d|_d|_ttj d��5}dD];} tj | dg||���} | dkr | |_n�,#t$rY�8wxYwddd��dS#1swxYwYdS) 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)�gpg�gpg2z --version��stdout�stderrr)� 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 ��/builddir/build/BUILDROOT/alt-python311-pip-21.3.1-4.el8.x86_64/opt/alt/python311/lib/python3.11/site-packages/pip/_vendor/distlib/index.py�__init__zPackageIndex.__init__$s~���'�-��� ���!�!�!�4<�T�X�4F�4F�1����f�e�T� � H�U� H�d� H�f�4E�&E�&E�"�#;�d�h�#F�G�G� G� $��� �������� � �"�*�c� "� "� �d�%� � ���#�.��;�/?��6:�<�<�<�B��Q�w�w�#$������������D����� � � � � � � � � � � � ���� � � � � � s6�C!�&C�C!� C�C!�C�C!�!C%�(C%c�"�ddlm}|��S)zs Get the distutils command for interacting with PyPI configurations. :return: the command. r)�_get_pypirc_command)�utilr3)r&�cmds r0r3z PackageIndex._get_pypirc_commandAs!�� 5�4�4�4�4�4��s�u�u� �c��ddlm}||��}|�d��|_|�d��|_|�dd��|_|�d|j��|_dS) z� Read the PyPI access configuration as supported by distutils. This populates ``username``, ``password``, ``realm`` and ``url`` attributes from the configuration. r)� _load_pypirc�username�password�realmr� repositoryN)r4r8�getr9r:r;r)r&r8�cfgs r0rzPackageIndex.read_configurationIs{�� '�&�&�&�&�&��l�4� � ����� �+�+�� ���� �+�+�� ��W�W�W�f�-�-�� ��7�7�<���2�2����r6c�P�|���ddlm}||��dS)z� Save the PyPI access configuration. You must have set ``username`` and ``password`` attributes before calling this method. r)� _store_pypircN)�check_credentialsr4r@)r&r@s r0�save_configurationzPackageIndex.save_configurationVs>�� ��� � � �'�'�'�'�'�'�� �d�����r6c��|j�|j�td���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) r9r:rrr r� add_passwordr;rr)r&�pm�_r(s r0rAzPackageIndex.check_credentials_s}�� �=� �D�M�$9�"�#F�G�G� G� � � �� (��� 2� 2���6�1�a��A� ���� �F�D�M�4�=�I�I�I� 4�R� 8� 8����r6c��|���|���|���}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. �verify�:action�submit)rA�validate�todict�encode_request�items� send_request)r&�metadata�d�request�responses r0�registerzPackageIndex.registerks��� ��� � � ������� �O�O� � ����)� ��%�%�a�g�g�i�i��4�4���$�$�W�-�-����)� ��%�%�a�g�g�i�i��4�4��� � ��)�)�)r6c�� |���}|sn\|�d�����}|�|��t�|�d|�����s|���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. T�utf-8z: N)�readline�decode�rstrip�append�logger�debug�close)r&�name�stream�outbufr.s r0�_readerzPackageIndex._readers��� /����!�!�A�� ������!�!�(�(�*�*�A� �M�M�!� � � � �L�L�T�T�T�1�1�-� .� .� .�  /� � � �����r6c ���|jdddg}|�|j}|r|�d|g��|�|�gd���tj��}t j�|t j�|��dz��}|�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�tempfile�mkdtempr!r)�join�basenamer[r\)r&�filename�signer� sign_password�keystorer5�td�sfs r0�get_sign_commandzPackageIndex.get_sign_command�s����x���Z�8�� � ��}�H� � 0� �J�J� �X�.� /� /� /� � $� �J�J�:�:�:� ;� ;� ;� � � � �� �W�\�\�"�b�g�.�.�x�8�8�6�A� B� B�� � � �O�Y���J��H�6� 7� 7� 7�� � �^�S�X�X�c�]�]�3�3�3��B�w�r6c�@�tjtjd�}|�tj|d<g}g}tj|fi|��}t|jd|j|f���}|���t|jd|j|f���}|���|�3|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�Popenrrar�startrrw�writer]�waitrm� returncode) r&r5� input_data�kwargsrr�p�t1�t2s r0� run_commandzPackageIndex.run_command�s��!�o� �o� � �� � !�(�o�F�7�O����� � �S� +� +�F� +� +���4�<�x���6�.J� K� K� K�� ��� � � � �4�<�x���6�.J� K� K� K�� ��� � � � � !� �G�M�M�*� %� %� %� �G�M�M�O�O�O� ������ ��� � � � ��� � � ��|�V�V�+�+r6c���|�||||��\}}|�||�d����\}}} |dkrtd|z���|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. rVrz&sign command failed with error code %s)rur��encoder) r&rorprqrrr5�sig_filer/rrs r0� sign_filezPackageIndex.sign_file�s����-�-�h�� �.6�8�8� ��X�!�-�-�c�.;�.B�.B�7�.K�.K�M�M���F�F� ��7�7�"�$-�/1�$2�3�3� 3��r6�sdist�sourcec ��|���tj�|��st d|z���|���|���}d} |r:|jst� d��n|� ||||��} t|d��5} | � ��} ddd��n #1swxYwYtj| �����} tj| �����} |�dd||| | d���dtj�|��| fg}| r�t| d��5} | � ��}ddd��n #1swxYwY|�d tj�| ��|f��t)jtj�| ����|�|���|��}|�|��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�rb� file_upload�1)rI�protocol_version�filetype� pyversion� md5_digest� sha256_digest�content� gpg_signature)rAr!r)�existsrrKrLrr[�warningr�r �read�hashlib�md5� hexdigest�sha256�updaternrZ�shutil�rmtree�dirnamerMrNrO)r&rProrprqr�r�rrrQr��f� file_datar�r��files�sig_datarRs r0� upload_filezPackageIndex.upload_file�s���. ��� � � ��w�~�~�h�'�'� ?�"�?�X�#=�>�>� >������� �O�O� � ���� � 4��8� 4����J�K�K�K�K��>�>�(�F�M�*2�4�4�� �(�D� !� !� !�Q������I� !� !� !� !� !� !� !� !� !� !� !���� !� !� !� !��[��+�+�5�5�7�7� ���y�1�1�;�;�=�=� � ���$� #� �"�$�*�  � � � � ��R�W�-�-�h�7�7��C�D�� � 5��h��%�%� $���6�6�8�8�� $� $� $� $� $� $� $� $� $� $� $���� $� $� $� $� �L�L�/�2�7�+;�+;�H�+E�+E�!�#� $� $� $� �M�"�'�/�/�(�3�3� 4� 4� 4��%�%�a�g�g�i�i��7�7��� � ��)�)�)s$�<C�C!�$C!�F&�&F*�-F*c�(�|���tj�|��st d|z���tj�|d��}tj�|��st d|z���|���|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)rI� doc_uploadr^�versionr�)rAr!r)�isdirrrmr�rKr^r�r �getvaluerMrO) r&rP�doc_dir�fnr^r��zip_data�fieldsr�rRs r0�upload_documentationz!PackageIndex.upload_documentation!s�� ��� � � ��w�}�}�W�%�%� D�"�#8�7�#B�C�C� C� �W�\�\�'�<� 0� 0���w�~�~�b�!�!� 9�"�?�R�#7�8�8� 8������� � �x�'7�g���7�#�#�,�,�.�.��+��4�.�9�g�"6�8���T�8�,�-���%�%�f�e�4�4��� � ��)�)�)r6c���|jdddg}|�|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`. rcrdreNrfz--verifyrhri)rrrjr[r\rm)r&�signature_filename� data_filenamerrr5s r0�get_verify_commandzPackageIndex.get_verify_command=s}���x���Z�8�� � ��}�H� � 0� �J�J� �X�.� /� /� /� � � �J� 2�M�B�C�C�C�� � �^�S�X�X�c�]�]�3�3�3�� r6c���|jstd���|�|||��}|�|��\}}}|dvrtd|z���|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�r�)r&r�r�rrr5r/rrs r0�verify_signaturezPackageIndex.verify_signatureUs����x� 2�"�$1�2�2� 2��%�%�&8�-�&.�0�0��!�-�-�c�2�2���F�F� �V� � �"�$'�)+�$,�-�-� -��Q�w�r6c �<�|�d}t�d��n^t|ttf��r|\}}nd}t t |����}t�d|z��t|d��5}|�t|����} |� ��} d} d} d} d} d | vrt| d ��} |r || | | �� |� | ��}|snS| t|��z } |�|��|r|�|��| d z } |r || | | ���k |���n#|���wxYw ddd��n #1swxYwY| dkr| | krt#d | | fz���|rQ|���}||krt#|�d|�d|�d|�����t�d|��dSdS)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-LengthTrz1retrieval incomplete: got only %d out of %d bytesz digest mismatch for z : expected z, got zDigest verified: %s)r[r\� isinstance�list�tuple�getattrr�r rOr�info�intr��lenr}r�r]rr�)r&r�destfile�digest� reporthook�digester�hasher�dfp�sfp�headers� blocksize�sizer��blocknum�block�actuals r0� download_filezPackageIndex.download_filens���, �>��H� �L�L�.� /� /� /� /��&�4��-�0�0� �!'�������/�w�w��/�/�1�1�H� �L�L�/�&�8� 9� 9� 9��(�D� !� !� �S��#�#�G�C�L�L�1�1�C� ��(�(�*�*�� � �������#�w�.�.��w�'7�8�9�9�D��:��J�x��D�9�9�9� >��H�H�Y�/�/�E� ����C��J�J�&�D��I�I�e�$�$�$��/� ����.�.�.���M�H�!�>�"� �8�Y��=�=�=� >��� � � � � � ��� � � � � � ���� �5 � � � � � � � � � � ���� � � � �: �1�9�9�����"�C���,�� � � � � 8��'�'�)�)�F�����&�7=�v�v�x�x�x�7=�v�v�v�v�(G�H�H�H� �L�L�.�� 7� 7� 7� 7� 7�  8� 8s+�#F�2B0E8�#F�8F�F�F"�%F"c���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). )rrZrr r )r&�req�handlers�openers r0rOzPackageIndex.send_request�se���� � � 3� �O�O�D�1� 2� 2� 2� � � /� �O�O�D�-� .� .� .��x�(���{�{�3���r6c �L�g}|j}|D]n\}}t|ttf��s|g}|D]G}|�d|zd|z�d��d|�d��f���H�o|D]<\}} } |�d|zd|�d| �d��d��d| f���=|�d|zdzdf��d�|��} d |z} | 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"rVr6z&Content-Disposition: form-data; name="z "; filename="�"s smultipart/form-data; boundary=)z Content-typezContent-length) �boundaryr�r�r�rjr�rm�strr�rr)r&r�r��partsr��k�values�v�keyro�value�body�ctr�s r0rMzPackageIndex.encode_request�s|�����=��� (� (�I�A�v��f�t�U�m�4�4� "� ���� (� (��� � ��H�$�@�����w�����H�H�W�%�%� '�(�(�(�(� (�%*� � � �C��5� �L�L��� � ��#�#�x�x�x�!�"(�&��/�/��� � � � � � � � �e�h�&��.��4�5�5�5��|�|�E�"�"�� .�� 9���!�#�d�)�)�n�n� � ���t�x��w�/�/�/r6c���t|t��rd|i}t|jd���} |�||pd��|d����S#|d����wxYw)Nr^g@)�timeout�andr])r�r r r�search)r&�terms�operator� rpc_proxys r0r�zPackageIndex.search�s��� �e�\� *� *� $��U�O�E����#�6�6�6� � !��#�#�E�8�+<�u�=�=� �I�I�g� � � � � � �� �I�I�g� � � � � � ���s �A�A1)N)NNr�r�N)NN)�__name__� __module__� __qualname__�__doc__r�r1r3rrBrArTrarur�r�r�r�r�r�r�rOrMr��r6r0rrs��������� A�H�����:��� 3� 3� 3���� 9� 9� 9�*�*�*�(���&#'�����:!,�!,�!,�!,�F����.JN�CG�7*�7*�7*�7*�r*�*�*�:%)�����2#'�����2K8�K8�K8�K8�Z � � � )0�)0�)0�V!�!�!�!�!�!r6r)r��loggingr!r�r#rk� threadingr� ImportError�dummy_threading�r�compatrrrr r r r4r r � getLoggerr�r[r� DEFAULT_REALM�objectrr�r6r0�r�sc���������� � � � � � � � ���������'� � � � � � � ���'�'�'�&�&�&�&�&�&�&�&�'����������;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�;�&�&�&�&�&�&�&�&� �� �8� $� $��'� �� �a!�a!�a!�a!�a!�6�a!�a!�a!�a!�a!s �!� /�/