HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/Python311/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-311.pyc
�

�mi�1���dZddlmZddlZddlZddlZddlZddlm	Z	m
Z
ddlmZddl
mZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZmZddlm Z m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'm(Z(ddl)m*Z*m+Z+ddl,m-Z-m.Z.m/Z/ddl0m1Z1m2Z2m3Z3ej4e5��Z6d/d�Z7d0d�Z8	d1d2d#�Z9d3d&�Z:d4d)�Z;d5d*�Z<eGd+�d,����Z=Gd-�d.��Z>dS)6z(Download files with progress indicators.�)�annotationsN)�Iterable�Mapping)�	dataclass)�
HTTPStatus)�BinaryIO)�PreparedRequest)�Response)�HTTPResponse)�HTTPHeaderDict)�ReadTimeoutError)�BarType�get_download_progress_renderer)�IncompleteDownloadError�NetworkConnectionError)�PyPI)�Link)�
SafeFileCache�
is_from_cache)�CacheControlAdapter�
PipSession)�HEADERS�raise_for_status�response_chunks)�format_size�redact_auth_from_url�splitext�respr
�return�
int | Nonec�t�	t|jd��S#tttf$rYdSwxYw)N�content-length)�int�headers�
ValueError�KeyError�	TypeError�rs �@D:\Python311\Lib\site-packages\pip/_internal/network/download.py�_get_http_response_sizer* sF����4�<� 0�1�2�2�2����)�,�����t�t����s��7�7�
str | Nonec�h�|j�d|j�d����S)z�
    Return either the ETag or Last-Modified header (or None if neither exists).
    The return value can be used in an If-Range header.
    �etagz
last-modified)r$�getr(s r)�(_get_http_response_etag_or_last_modifiedr/'s,��
�<���F�D�L�$4�$4�_�$E�$E�F�F�F��linkr�progress_barr�total_length�range_start�Iterable[bytes]c��|jtjkr|j}n|j}t|��}|r=|r&|�dt
|���dt
|���d�}n|�dt
|���d�}t|��rt�	d|��n9|rt�	d|��nt�	d|��t�
��tjkrd}n"t|��rd}n|sd}n|d	krd}nd}t|��}|s|St|||�
��}	|	|��S)Nz (�/�)zUsing cached %szResuming download %szDownloading %sFTi)�bar_type�size�initial_progress)�netlocr�file_storage_domain�show_url�url_without_fragmentrrr�logger�info�getEffectiveLevel�logging�INFOrr)
rr1r2r3r4�url�
logged_url�
show_progress�chunks�renderers
          r)�
_log_downloadrJ/s����{�d�.�.�(��m����'��%�c�*�*�J��G��	G��X�X��[�!9�!9�X�X�K��<U�<U�X�X�X�
�J�'�F�F�+�l�*C�*C�F�F�F�J��T���2����%�z�2�2�2�2�	�2����*�J�7�7�7�7����$�j�1�1�1�
���!�!�G�L�0�	��
�
�	�t�	�	���
�
�
���
�
�	��	$���
�
��
�
�T�
"�
"�F����
�-��L�;����H��8�F���r0�filename�strc�@�tj�|��S)zJ
    Sanitize the "filename" value from a Content-Disposition header.
    )�os�path�basename)rKs r)�sanitize_content_filenamerQbs���7���H�%�%�%r0�content_disposition�default_filenamec��tj���}||d<|�d��}|rt	t|����}|p|S)z�
    Parse the "filename" value from a Content-Disposition header, and
    return the default filename if the result is empty.
    �content-typerK)�email�message�Message�	get_paramrQrL)rRrS�mrKs    r)�parse_content_dispositionr[is[��
	�
�����A�+�A�n���{�{�:�&�&�H��<�-�S��]�]�;�;���'�'�'r0c��|j}|j�d��}|rt||��}t	|��d}|s4tj|j�dd����}|r||z
}|sA|j|jkr1tj	�|j��d}|r||z
}|S)zoGet an ideal filename from the given HTTP response, falling back to
    the link filename if not provided.
    zcontent-disposition�rU�)
rKr$r.r[r�	mimetypes�guess_extensionrErNrO)rr1rKrR�exts     r)�_get_http_response_filenamerbxs����}�H��,�*�*�+@�A�A���L�,�-@�(�K�K���x�(�(��+�C����'���(8�(8���(L�(L�M�M���	���O�H���4�8�t�x�'���g���t�x�(�(��+���	���O�H��Or0c�f�eZdZUdZded<ded<ded<dZd	ed
<dZd	ed<dd�Zdd�Zdd�Z	dS)�
_FileDownloadz+Stores the state of a single link download.rr1r�output_filer r:rr#�bytes_received�
reattemptsr�boolc�N�t|jduo|j|jk��S�N)rhr:rf��selfs r)�
is_incompletez_FileDownload.is_incomplete�s&���D�I�T�)�M�d�.A�D�I�.M�N�N�Nr0�data�bytes�Nonec�t�|xjt|��z
c_|j�|��dSrj)rf�lenre�write)rlrns  r)�write_chunkz_FileDownload.write_chunk�s9�����s�4�y�y�(�������t�$�$�$�$�$r0c�z�|j�d��|j���d|_dS)z1Delete any saved data and reset progress to zero.rN)re�seek�truncaterfrks r)�
reset_filez_FileDownload.reset_file�s<������a� � � ���!�!�#�#�#�����r0N)rrh)rnrorrp)rrp)
�__name__�
__module__�__qualname__�__doc__�__annotations__rfrgrmrtrx�r0r)rdrd�s��������5�5��J�J�J����������N������J�����O�O�O�O�%�%�%�%� � � � � � r0rdc�R�eZdZd#d	�Zd$d�Zd%d�Zd&d�Zd'd�Zd(d�Zd)d�Z	e
fd*d!�Zd"S)+�
Downloader�sessionrr2r�resume_retriesr#rrpc�P�|dks
Jd���||_||_||_dS)Nrz<Number of max resume retries must be bigger or equal to zero)�_session�
_progress_bar�_resume_retries)rlr�r2r�s    r)�__init__zDownloader.__init__�sL��
�a��	J�	J�I�	J�	J�	J� ��
�)���-����r0�links�Iterable[Link]�locationrL�&Iterable[tuple[Link, tuple[str, str]]]c#�BK�|D]}|||��\}}|||ffV��dS)z.Convenience method to download multiple links.Nr~)rlr�r�r1�filepath�content_types      r)�batchzDownloader.batch�sP�����	1�	1�D�%)�T�$��%9�%9�"�H�l���<�0�0�0�0�0�0�	1�	1r0r1r�tuple[str, str]c���|�|��}t|��}tj�|t||����}t
|d��5}t|||��}|�||��|�	��r|�
||��ddd��n#1swxYwY|j�dd��}||fS)z+Download a link and save it under location.�wbNzContent-Typer^)
�	_http_getr*rNrO�joinrb�openrd�_process_responserm�_attempt_resumes_or_redownloadsr$r.)	rlr1r�r�
download_sizer��content_file�downloadr�s	         r)�__call__zDownloader.__call__�s(���~�~�d�#�#��/��5�5�
��7�<�<��*E�d�D�*Q�*Q�R�R��
�(�D�
!�
!�	E�\�$�T�<��G�G�H��"�"�8�T�2�2�2��%�%�'�'�
E��4�4�X�t�D�D�D�		E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E��|�'�'���;�;����%�%s�#AC�C�Cr�rdrr
c��t||j|j|j|j���}	|D]}|�|���dS#t$r.}|j�|�t�d��Yd}~dSd}~wwxYw)z)Download and save chunks from a response.)r4Nz'Connection timed out while downloading.)	rJr1r�r:rfrtr
r@�warning)rlr�rrH�chunk�es      r)r�zDownloader._process_response�s������M����M� �/�
�
�
��	F��
,�
,���$�$�U�+�+�+�+�
,�
,���	F�	F�	F��}�
����N�N�D�E�E�E�E�E�E�E�E�E�����	F���s�A�
A>�#A9�9A>�
first_respc�>�|j|jk�r'|����r|j�J�|xjdz
c_t�dt
|j��t
|j��|j��	|�||���}|j	tjk}|r*|���t|��|_|}|�||��n#tt t"f$rY��wxYw|j|jkr|�����|���r-t%j|jj��t-|���|jdkr|�||��dSdS)zAAttempt to resume/restart the download if connection was dropped.Nr]z<Attempting to resume incomplete download (%s/%s, attempt %d))�should_matchr)rgr�rmr:r@r�rrf�_http_get_resume�status_coder�PARTIAL_CONTENTrxr*r��ConnectionErrorr
�OSErrorrN�removere�namer�_cache_resumed_download)rlr�r��resume_resp�must_restarts     r)r�z*Downloader._attempt_resumes_or_redownloads�s���
�!�D�$8�8�	�X�=S�=S�=U�=U�	��=�,�,�,����1�$����N�N�N��H�3�4�4��H�M�*�*��#�	
�
�
�

�"�3�3�H�:�3�V�V�� +�6�*�:T�T���-��'�'�)�)�)�$;�K�$H�$H�H�M�!,�J��&�&�x��=�=�=�=��#�%5�w�?�
�
�
���
����-�!�D�$8�8�	�X�=S�=S�=U�=U�	�4�!�!�#�#�	4��I�h�*�/�0�0�0�)�(�3�3�3����"�	?��(�(��:�>�>�>�>�>�	?�	?s�A.C6�6D�D�original_responsec���|jj}|j�|��}t	|t
��st�d|��dSt	|jt��s
Jd���t��}|�d|i���t��}|j
���D] \}}|���dvr|||<�!t!|j��|d<t%d|d	d
���}	|j�|��}
|jj�||	d��}|j�|
|��|j���t5|jjd
��5}|j�|
|��ddd��n#1swxYwYt�d|��dS)an
        Manually cache a file that was successfully downloaded via resume retries.

        cachecontrol doesn't cache 206 (Partial Content) responses, since they
        are not complete files. This method manually adds the final file to the
        cache as though it was downloaded in a single request, so that future
        requests can use the cache.
        z<Skipping resume download caching: no cache controller for %sNzseparate body cache not in use!�GET)�methodrEr$)z
content-ranger"r"r^��F)�bodyr$�status�preload_contentr0�rbz?Cached resumed download as complete response for future use: %s)r1r?r��get_adapter�
isinstancerr@�debug�cacherr	�preparerr$�items�lowerrLr:�URLlib3Response�
controller�	cache_url�
serializer�dumps�setre�flushr�r��set_body_from_io)
rlr�r�rE�adapter�synthetic_request�synthetic_response_headers�key�value�synthetic_responser��
metadata_blob�fs
             r)r�z"Downloader._cache_resumed_downloadsN���m�0���-�+�+�C�0�0���'�#6�7�7�	��L�L�N�PS�
�
�
�
�F���M�=�
�
�	-�	-�,�	-�	-�	-�,�-�-���!�!��C��!�D�D�D�%3�%5�%5�"�+�3�9�9�;�;�	8�	8�J�C���y�y�{�{�"E�E�
8�27�*�3�/��7:�8�=�7I�7I�"�#3�4�,��.��!�	
�
�
���&�0�0��5�5�	��*�5�;�;��1�3�
�
�
�	�
���)�]�3�3�3���"�"�$�$�$�
�(�&�+�T�
2�
2�	9�a��M�*�*�9�a�8�8�8�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�	���M�s�	
�	
�	
�	
�	
s�G�G
�
G
r�c��tj��}d|j�d�|d<t|��x}r||d<|�|j|��S)z2Issue a HTTP range request to resume the download.zbytes=�-�RangezIf-Range)r�copyrfr/r�r1)rlr�r�r$�
identifiers     r)r�zDownloader._http_get_resume=s_���,�.�.��>�H�$;�>�>�>����B�,�O�O�O�:�	-�",�G�J���~�~�h�m�W�5�5�5r0r$�Mapping[str, str]c���|j}	|j�||d���}t|��nB#t$r5}|j�J�t�d|jj|���d}~wwxYw|S)NT)r$�streamzHTTP error %s while getting %s)	r?r�r.rr�responser@�criticalr�)rlr1r$�
target_urlrr�s      r)r�zDownloader._http_getKs����.�
�	��=�$�$�Z���$�N�N�D��T�"�"�"�"��%�	�	�	��:�)�)�)��O�O�0�!�*�2H�$�
�
�
�
�����	�����s�,6�
A5�0A0�0A5N)r�rr2rr�r#rrp)r�r�r�rLrr�)r1rr�rLrr�)r�rdrr
rrp)r�rdr�r
rrp)r�rdr�r
rrp)r�rdr�r
rr
)r1rr$r�rr
)ryrzr{r�r�r�r�r�r�r�rr�r~r0r)r�r��s�������.�.�.�.�1�1�1�1�
&�
&�
&�
&�F�F�F�F�&&?�&?�&?�&?�P6
�6
�6
�6
�p6�6�6�6�BI�������r0r�)rr
rr )rr
rr+)r)rr
r1rr2rr3r r4r rr5)rKrLrrL)rRrLrSrLrrL)rr
r1rrrL)?r|�
__future__r�
email.messagerVrCr_rN�collections.abcrr�dataclassesr�httpr�typingr�pip._vendor.requestsr	�pip._vendor.requests.modelsr
�pip._vendor.urllib3rr�� pip._vendor.urllib3._collectionsr�pip._vendor.urllib3.exceptionsr
�pip._internal.cli.progress_barsrr�pip._internal.exceptionsrr�pip._internal.models.indexr�pip._internal.models.linkr�pip._internal.network.cacherr�pip._internal.network.sessionrr�pip._internal.network.utilsrrr�pip._internal.utils.miscrrr�	getLoggerryr@r*r/rJrQr[rbrdr�r~r0r)�<module>r�s���.�.�"�"�"�"�"�"�������������	�	�	�	�-�-�-�-�-�-�-�-�!�!�!�!�!�!�������������0�0�0�0�0�0�0�0�0�0�0�0�?�?�?�?�?�?�;�;�;�;�;�;�;�;�;�;�;�;�S�S�S�S�S�S�S�S�T�T�T�T�T�T�T�T�+�+�+�+�+�+�*�*�*�*�*�*�D�D�D�D�D�D�D�D�I�I�I�I�I�I�I�I�R�R�R�R�R�R�R�R�R�R�P�P�P�P�P�P�P�P�P�P�	��	�8�	$�	$������G�G�G�G� �0�0�0�0�0�f&�&�&�&�(�(�(�(�����*� � � � � � � ��� �.q�q�q�q�q�q�q�q�q�qr0