§
    è phF+  ã                   ó   — d Z ddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZm Z m!Z! ddl"m#Z#m$Z$m%Z%  ej&        e'¦  «        Z(dedee)         fd„Z*dedee+         fd„Z,	 d%dedede+dee)         dee)         de
e-         fd„Z.de+de+fd„Z/de+de+de+fd„Z0dedede+fd„Z1	 	 d&dededee)         dee+         def
d „Z2 G d!„ d"¦  «        Z3 G d#„ d$¦  «        Z4dS )'z(Download files with progress indicators.é    N)Ú
HTTPStatus)ÚBinaryIOÚIterableÚOptionalÚTuple)ÚResponse)ÚReadTimeoutError)Úget_download_progress_renderer)ÚIncompleteDownloadErrorÚNetworkConnectionError)ÚPyPI)ÚLink)Úis_from_cache)Ú
PipSession)ÚHEADERSÚraise_for_statusÚresponse_chunks)Úformat_sizeÚredact_auth_from_urlÚsplitextÚrespÚreturnc                 ót   — 	 t          | j        d         ¦  «        S # t          t          t          f$ r Y d S w xY w)Nzcontent-length)ÚintÚheadersÚ
ValueErrorÚKeyErrorÚ	TypeError©r   s    úkC:\Users\Daniel\PycharmProjects\Portfolio_Website\.venv\Lib\site-packages\pip\_internal\network\download.pyÚ_get_http_response_sizer!      sF   € ðÝ�4”<Ð 0Ô1Ñ2Ô2Ð2øÝ�¥)Ð,ð ð ð Øˆtˆtðøøøs   ‚ œ7¶7c                 ó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ó    ÚlinkÚprogress_barÚtotal_lengthÚrange_startc                 ó¦  — |j         t          j        k    r|j        }n|j        }t          |¦  «        }|r=|r&|› dt          |¦  «        › dt          |¦  «        › d�}n|› dt          |¦  «        › d�}t          | ¦  «        rt           	                    d|¦  «         n9|rt           	                    d|¦  «         nt           	                    d|¦  «         t           
                    ¦   «         t          j        k    rd}n"t          | ¦  «        rd}n|sd}n|d	k    rd}nd}t          | ¦  «        }|s|S t          |||¬
¦  «        }	 |	|¦  «        S )Nz (ú/ú)zUsing cached %szResuming download %szDownloading %sFTi   )Úbar_typeÚsizeÚinitial_progress)Únetlocr   Úfile_storage_domainÚshow_urlÚurl_without_fragmentr   r   r   ÚloggerÚinfoÚgetEffectiveLevelÚloggingÚINFOr   r
   )
r   r'   r(   r)   r*   ÚurlÚ
logged_urlÚshow_progressÚchunksÚrenderers
             r    Ú_prepare_downloadr?   (   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ÑÔÐr&   Úfilenamec                 ó@   — t           j                             | ¦  «        S )zJ
    Sanitize the "filename" value from a Content-Disposition header.
    )ÚosÚpathÚbasename)r@   s    r    Úsanitize_content_filenamerE   [   s   € õ Œ7×Ò˜HÑ%Ô%Ð%r&   Úcontent_dispositionÚdefault_filenamec                 ó¶   — t           j                             ¦   «         }| |d<   |                     d¦  «        }|rt	          t          |¦  «        ¦  «        }|p|S )zƒ
    Parse the "filename" value from a Content-Disposition header, and
    return the default filename if the result is empty.
    úcontent-typer@   )ÚemailÚmessageÚMessageÚ	get_paramrE   Ústr)rF   rG   Úmr@   s       r    Úparse_content_dispositionrP   b   s[   € õ
 	Œ×ÒÑÔ€AØ+€A€nÑØ�{Š{˜:Ñ&Ô&€HØð <õ -­S°©]¬]Ñ;Ô;ˆØÐ'Ð'Ð'r&   c                 óˆ  — |j         }| j                             d¦  «        }|rt          ||¦  «        }t	          |¦  «        d         }|s4t          j        | j                             dd¦  «        ¦  «        }|r||z  }|sA|j        | j        k    r1t          j	                             | j        ¦  «        d         }|r||z  }|S )zoGet an ideal filename from the given HTTP response, falling back to
    the link filename if not provided.
    zcontent-dispositioné   rI   Ú )
r@   r   r$   rP   r   Ú	mimetypesÚguess_extensionr:   rB   rC   )r   r'   r@   rF   Úexts        r    Ú_get_http_response_filenamerW   q   sÒ   € ð Œ}€Hàœ,×*Ò*Ð+@ÑAÔAÐØð LÝ,Ð-@À(ÑKÔKˆÝ! (Ñ+Ô+¨AÔ.€CØð ÝÔ'¨¬×(8Ò(8¸ÈÑ(LÔ(LÑMÔMˆØð 	Ø˜‰OˆHØð �4”8˜tœxÒ'ð ÝŒg×Ò˜tœxÑ(Ô(¨Ô+ˆØð 	Ø˜‰OˆHØ€Or&   ÚsessionÚif_rangec                 óh  — |j                              dd¦  «        d         }t          j        ¦   «         }|r	d|› d�|d<   |r||d<   	 |                      ||d¬	¦  «        }t          |¦  «         nB# t          $ r5}|j        €J ‚t           	                    d
|j        j
        |¦  «         ‚ d }~ww xY w|S )Nú#rR   r   zbytes=ú-ÚRangezIf-RangeT)r   ÚstreamzHTTP error %s while getting %s)r:   Úsplitr   Úcopyr$   r   r   Úresponser5   ÚcriticalÚstatus_code)rX   r'   r*   rY   Ú
target_urlr   r   Úes           r    Ú_http_get_downloadrf   †   sÙ   € ð ”—’  QÑ'Ô'¨Ô*€JÝŒl‰nŒn€Gàð 3Ø2 KÐ2Ð2Ð2ˆ�Ñàð 'Ø&ˆ�
ÑðØ�{Š{˜:¨w¸tˆ{ÑDÔDˆÝ˜ÑÔÐÐøÝ!ð ð ð ØŒzÐ%Ð%Ð%Ý�ŠÐ8¸!¼*Ô:PÐRVÑWÔWÐWØøøøøðøøøð €Ks   Á'A0 Á0
B/Á:0B*Â*B/c                   ó  — e Zd Zdedededdfd„Zdededeeef         fd	„Z	d
e
dedededee         defd„Zdee         dededefd„Zd
e
dededee         deddfd„Zd
e
dedeeee         ee         f         fd„ZdS )Ú
DownloaderrX   r(   Úresume_retriesr   Nc                 óP   — |dk    s
J d¦   «         ‚|| _         || _        || _        d S )Nr   z<Number of max resume retries must be bigger or equal to zero)Ú_sessionÚ_progress_barÚ_resume_retries©ÚselfrX   r(   ri   s       r    Ú__init__zDownloader.__init__Ÿ   sL   € ð ˜aÒð	Jð 	JàIñ	Jô 	Jð 	Jð  ˆŒØ)ˆÔØ-ˆÔÐÐr&   r'   Úlocationc                 ó¬  — t          | j        |¦  «        }t          |¦  «        }|j                             dd¦  «        }t          ||¦  «        }t          j                             ||¦  «        }t          |d¦  «        5 }|  
                    |||d|¦  «        }	|r|	|k     r|                      |||||	¦  «         ddd¦  «         n# 1 swxY w Y   ||fS )z.Download the file given by link into location.zContent-TyperS   Úwbr   N)rf   rk   r!   r   r$   rW   rB   rC   ÚjoinÚopenÚ_process_responseÚ_attempt_resume)
ro   r'   rq   r   r)   Úcontent_typer@   ÚfilepathÚcontent_fileÚbytes_receiveds
             r    Ú__call__zDownloader.__call__¬   s%  € å! $¤-°Ñ6Ô6ˆõ /¨tÑ4Ô4ˆØ”|×'Ò'¨¸Ñ;Ô;ˆå.¨t°TÑ:Ô:ˆÝ”7—<’< ¨(Ñ3Ô3ˆå�(˜DÑ!Ô!ð 	 \Ø!×3Ò3Ø�d˜L¨!¨\ñô ˆNð ð  °Ò =ð Ø×$Ò$Ø˜$ ¨l¸Nñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ˜Ð%Ð%s   Â ;CÃCÃCr   rz   r{   r)   c                 ó~   — t          ||| j        ||¬¦  «        }|                      ||t          |¦  «        ¬¦  «        S )z6Process the response and write the chunks to the file.)r*   )Úallow_partial)r?   rl   Ú_write_chunks_to_fileÚbool)ro   r   r'   rz   r{   r)   r=   s          r    rv   zDownloader._process_responseÄ   sT   € õ #Ø�$˜Ô*¨LÀnð
ñ 
ô 
ˆð ×)Ò)Ø�Lµ°\Ñ0BÔ0Bð *ñ 
ô 
ð 	
r&   r=   r~   c                óÐ   — d}	 |D ])}|t          |¦  «        z  }|                     |¦  «         Œ*n5# t          $ r(}|s|‚t                               d¦  «         Y d}~nd}~ww xY w|S )zEWrite the chunks to the file and return the number of bytes received.r   z'Connection timed out while downloading.N)ÚlenÚwriter	   r5   Úwarning)ro   r=   rz   r~   r{   Úchunkre   s          r    r   z Downloader._write_chunks_to_fileÔ   s¨   € ð ˆð
	FØð *ð *�Ø¥# e¡*¤*Ñ,�Ø×"Ò" 5Ñ)Ô)Ð)Ð)ð*øõ  ð 	Fð 	Fð 	Fà ð Ø�õ �NŠNÐDÑEÔEÐEÐEÐEÐEÐEÐEøøøøð	Føøøð Ðs   „,1 ±
A#»AÁA#c                 ó`  — t          |¦  «        }| j        }|rÚ|rØ||k     rÒ|dz  }t                               dt	          |¦  «        t	          |¦  «        | j        |z
  ¦  «         	 t          | j        |||¬¦  «        }|j        t          j	        k    }	|	r|  
                    ||¦  «        \  }}}||                      |||||¦  «        z  }n# t          t          t          f$ r Y ŒÎw xY w|r|r||k     °Ò|r7||k     r3t          j        |j        ¦  «         t%          |||| j        ¬¦  «        ‚dS dS )z9Attempt to resume the download if connection was dropped.rR   z<Attempting to resume incomplete download (%s/%s, attempt %d))r*   rY   )ÚretriesN)r%   rm   r5   r„   r   rf   rk   rc   r   ÚPARTIAL_CONTENTÚ_reset_download_staterv   ÚConnectionErrorr	   ÚOSErrorrB   ÚremoveÚnamer   )
ro   r   r'   rz   r)   r{   Úetag_or_last_modifiedÚattempts_leftÚresume_respÚmust_restarts
             r    rw   zDownloader._attempt_resumeç   s®  € õ !IÈÑ NÔ NÐàÔ,ˆØð  	˜}ð  	°À,Ò1Nð  	Ø˜QÑˆMå�NŠNØNÝ˜NÑ+Ô+Ý˜LÑ)Ô)ØÔ%¨Ñ5ñ	ô ð ðå0Ø”MØØ .Ø2ð	ñ ô �ð  +Ô6½*Ô:TÒT�Øð à×2Ò2°;ÀÑMÔMñ H�N LÐ2Gð  $×"8Ò"8Ø  |°^À\ñ#ô #ñ ��øõ $Õ%5µwÐ?ð ð ð Ø�ðøøøð? ð  	˜}ð  	°À,Ò1Nð  	ðF ð 	˜N¨\Ò9ð 	ÝŒI�lÔ'Ñ(Ô(Ð(Ý)Ø�n l¸DÔ<Pðñ ô ð ð	ð 	ð 	ð 	s   Á&A%C ÃC&Ã%C&c                 óž   — |                      d¦  «         |                     ¦   «          d}t          |¦  «        }t          |¦  «        }|||fS )zCReset the download state to restart downloading from the beginning.r   )ÚseekÚtruncater!   r%   )ro   r   rz   r{   r)   rŽ   s         r    r‰   z Downloader._reset_download_state  sX   € ð 	×Ò˜!ÑÔÐØ×ÒÑÔÐØˆÝ.¨tÑ4Ô4ˆÝ HÈÑ NÔ NÐà˜|Ð-BÐBÐBr&   )Ú__name__Ú
__module__Ú__qualname__r   rN   r   rp   r   r   r|   r   r   r   rv   r   Úbytesr€   r   rw   r‰   © r&   r    rh   rh   ž   s©  € € € € € ð.àð.ð ð.ð ð	.ð
 
ð.ð .ð .ð .ð&˜Tð &¨Sð &°U¸3À¸8´_ð &ð &ð &ð &ð0
àð
ð ð
ð ð	
ð
 ð
ð ˜s”mð
ð 
ð
ð 
ð 
ð 
ð Ø˜u”oðØ5=ðØQUðà	ðð ð ð ð&3àð3ð ð3ð ð	3ð
 ˜s”mð3ð ð3ð 
ð3ð 3ð 3ð 3ðjCàðCð ðCð 
ˆs�H˜S”M 8¨C¤=Ð0Ô	1ð	Cð Cð Cð Cð Cð Cr&   rh   c                   ór   — e Zd Zdedededdfd„Zdee         dedee	ee	eef         f                  fd	„Z
dS )
ÚBatchDownloaderrX   r(   ri   r   Nc                 ó2   — t          |||¦  «        | _        d S )N)rh   Ú_downloaderrn   s       r    rp   zBatchDownloader.__init__,  s   € õ & g¨|¸^ÑLÔLˆÔÐÐr&   Úlinksrq   c              #   óV   K  — |D ]#}|                       ||¦  «        \  }}|||ffV — Œ$dS )z0Download the files given by links into location.N)r�   )ro   rž   rq   r'   ry   rx   s         r    r|   zBatchDownloader.__call__4  sT   è è € ð ð 	1ð 	1ˆDØ%)×%5Ò%5°d¸HÑ%EÔ%EÑ"ˆH�lØ˜ <Ð0Ð0Ð0Ð0Ð0Ð0ð	1ð 	1r&   )r•   r–   r—   r   rN   r   rp   r   r   r   r|   r™   r&   r    r›   r›   +  s�   € € € € € ðMàðMð ðMð ð	Mð
 
ðMð Mð Mð Mð1Ø˜d”^ð1Ø/2ð1à	�%˜˜e C¨ HœoÐ-Ô.Ô	/ð1ð 1ð 1ð 1ð 1ð 1r&   r›   )r   )r   N)5Ú__doc__Úemail.messagerJ   r8   rT   rB   Úhttpr   Útypingr   r   r   r   Úpip._vendor.requests.modelsr   Úpip._vendor.urllib3.exceptionsr	   Úpip._internal.cli.progress_barsr
   Úpip._internal.exceptionsr   r   Úpip._internal.models.indexr   Úpip._internal.models.linkr   Úpip._internal.network.cacher   Úpip._internal.network.sessionr   Úpip._internal.network.utilsr   r   r   Úpip._internal.utils.miscr   r   r   Ú	getLoggerr•   r5   r   r!   rN   r%   r˜   r?   rE   rP   rW   rf   rh   r›   r™   r&   r    ú<module>r¯      s;  ðØ .Ð .à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;à JÐ JÐ JÐ JÐ JÐ JØ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ +Ð +Ð +Ð +Ð +Ð +Ø *Ð *Ð *Ð *Ð *Ð *Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ Pà	ˆÔ	˜8Ñ	$Ô	$€ð (ð ¨x¸¬}ð ð ð ð ðG°8ð GÀÈÄð Gð Gð Gð Gð "#ð0ð 0Ø
ð0à
ð0ð ð0ð ˜3”-ð	0ð
 ˜#”ð0ð ˆe„_ð0ð 0ð 0ð 0ðf&¨ð &°ð &ð &ð &ð &ð(°3ð (È#ð (ÐRUð (ð (ð (ð (ð hð °dð ¸sð ð ð ð ð0 "#Ø"ð	ð Øðà
ðð ˜#”ðð �sŒmð	ð
 ðð ð ð ð0JCð JCð JCð JCð JCñ JCô JCð JCðZ1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1r&   