ó
    �RjF+  ã                   óþ  • S r SSKrSSKrSSKrSSKrSSKJr  SSKJ	r	J
r
JrJr  SSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJrJ r J!r!  SSK"J#r#J$r$J%r%  \RL                  " \'5      r(S\S\\)   4S jr*S\S\\+   4S jr, S%S\S\S\+S\\)   S\\)   S\
\-   4S jjr.S\+S\+4S jr/S\+S\+S\+4S jr0S\S\S\+4S jr1  S&S\S\S\\)   S\\+   S\4
S  jjr2 " S! S"5      r3 " S# S$5      r4g)'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                 ój   •  [        U R                  S   5      $ ! [        [        [        4 a     g f = f)Nzcontent-length)ÚintÚheadersÚ
ValueErrorÚKeyErrorÚ	TypeError©r   s    ÚJD:\diplom_project\venv\Lib\site-packages\pip/_internal/network/download.pyÚ_get_http_response_sizer!      s5   € ðÜ�4—<‘<Ð 0Ñ1Ó2Ð2øÜœ¤)Ð,ó Ùðús   ‚ š2±2c                 ól   • U R                   R                  SU R                   R                  S5      5      $ )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¡L×$4Ñ$4°_Ó$EÓFÐFó    ÚlinkÚprogress_barÚtotal_lengthÚrange_startc                 ó¤  • UR                   [        R                  :X  a  UR                  nOUR                  n[        U5      nU(       a6  U(       a  U S[        U5       S[        U5       S3nOU S[        U5       S3n[        U 5      (       a  [        R                  SU5        O4U(       a  [        R                  SU5        O[        R                  SU5        [        R                  5       [        R                  :”  a  SnO([        U 5      (       a  SnOU(       d  SnOUS	:”  a  SnOSn[        U 5      nU(       d  U$ [        X#US
9n	U	" U5      $ )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‰m‰à×'Ñ'ˆä% cÓ*€JæÞà�,˜b¤¨[Ó!9Ð :¸!¼KÈÓ<UÐ;VÐVWÐXñ ð '˜< r¬+°lÓ*CÐ)DÀAÐFˆJä�T×ÑÜ�‰Ð% zÕ2Þ	Ü�‰Ð*¨JÕ7ä�‰Ð$ jÔ1ä×ÑÓ!¤G§L¡LÓ0Ø‰Ü	�t×	Ñ	Ø‰ÞØ‰Ø	˜Ó	$Ø‰àˆä˜TÓ"€FæØˆä-ØÀ;ñ€Hñ �FÓÐr&   Úfilenamec                 ó@   • [         R                  R                  U 5      $ )zB
Sanitize the "filename" value from a Content-Disposition header.
)ÚosÚpathÚbasename)r@   s    r    Úsanitize_content_filenamerE   [   s   € ô �7‰7×Ñ˜HÓ%Ð%r&   Úcontent_dispositionÚdefault_filenamec                 ó´   • [         R                  R                  5       nXS'   UR                  S5      nU(       a  [	        [        U5      5      nU=(       d    U$ )zw
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   sK   € ô
 	�‰×ÑÓ€AØ+€nÑØ�{‰{˜:Ó&€HÞô -¬S°«]Ó;ˆØ×'Ð'Ð'r&   c                 óÈ  • UR                   nU R                  R                  S5      nU(       a  [        X25      n[	        U5      S   nU(       d;  [
        R                  " U R                  R                  SS5      5      nU(       a  X$-  nU(       dQ  UR                  U R                  :w  a7  [        R                  R	                  U R                  5      S   nU(       a  X$-  nU$ )zgGet 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ÐÞÜ,Ð-@ÓKˆÜ! (Ó+¨AÑ.€CÞÜ×'Ò'¨¯©×(8Ñ(8¸ÈÓ(LÓMˆÞØ‰OˆHÞ�4—8‘8˜tŸx™xÓ'Ü�g‰g×Ñ˜tŸx™xÓ(¨Ñ+ˆÞØ‰OˆHØ€Or&   ÚsessionÚif_rangec                 óv  • UR                   R                  SS5      S   n[        R                  " 5       nU(       a	  SU S3US'   U(       a  X5S'    U R	                  XESS	9n[        U5        U$ ! [         a@  nUR                  c   e[        R                  S
UR                  R                  U5        e S nAff = f)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Šl‹n€GæØ# K =°Ð2ˆ�ÑæØ&�
ÑðØ�{‰{˜:¸tˆ{ÐDˆÜ˜Ôð
 €Køô	 "ó Ø�z‰zÑ%Ð%Ð%Ü�‰Ð8¸!¿*¹*×:PÑ:PÐRVÔWØûðús   ÁA. Á.
B8Á8;B3Â3B8c                   óì   • \ rS rSrS\S\S\SS4S jrS\S	\S\	\\4   4S
 jr
S\S\S\S\S\\   S\4S jrS\\   S\S\S\4S jrS\S\S\S\\   S\SS4S jrS\S\S\	\\\   \\   4   4S jrSrg)Ú
Downloaderéž   rX   r(   Úresume_retriesr   Nc                 óB   • US:¼  d   S5       eXl         X l        X0l        g )Nr   z<Number of max resume retries must be bigger or equal to zero)Ú_sessionÚ_progress_barÚ_resume_retries©ÚselfrX   r(   rj   s       r    Ú__init__ÚDownloader.__init__Ÿ   s/   € ð ˜aÓð	JàIó	JØàŒØ)ÔØ-Õr&   r'   Úlocationc                 óŒ  • [        U R                  U5      n[        U5      nUR                  R	                  SS5      n[        X15      n[        R                  R                  X&5      n[        US5       nU R                  X1USU5      n	U(       a  X”:  a  U R                  X1X„U	5        SSS5        Xu4$ ! , (       d  f       Xu4$ = f)z.Download the file given by link into location.zContent-TyperS   Úwbr   N)rf   rl   r!   r   r$   rW   rB   rC   ÚjoinÚopenÚ_process_responseÚ_attempt_resume)
rp   r'   rs   r   r)   Úcontent_typer@   ÚfilepathÚcontent_fileÚbytes_receiveds
             r    Ú__call__ÚDownloader.__call__¬   s¸   € ä! $§-¡-°Ó6ˆô /¨tÓ4ˆØ—|‘|×'Ñ'¨¸Ó;ˆä.¨tÓ:ˆÜ—7‘7—<‘< Ó3ˆä�(˜DÔ! \Ø!×3Ñ3Ø˜L¨!¨\óˆNö  Ó =Ø×$Ñ$Ø ¸Nô÷ "ð Ð%Ð%÷ "Ô!ð Ð%Ð%ús   Á44B3Â3
Cr   r|   r}   r)   c                 ó^   • [        XU R                  XTS9nU R                  Xc[        U5      S9$ )z6Process the response and write the chunks to the file.)r*   )Úallow_partial)r?   rm   Ú_write_chunks_to_fileÚbool)rp   r   r'   r|   r}   r)   r=   s          r    rx   ÚDownloader._process_responseÄ   s?   € ô #Ø˜×*Ñ*¨Lñ
ˆð ×)Ñ)Ø´°\Ó0Bð *ð 
ð 	
r&   r=   r�   c                óÈ   • Sn U H"  nU[        U5      -  nUR                  U5        M$     U$ ! [         a)  nU(       d  Ue[        R	                  S5         SnAU$ SnAff = f)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)rp   r=   r|   r�   r}   Úchunkre   s          r    r‚   Ú Downloader._write_chunks_to_fileÔ   sq   € ð ˆð
	FÛ�Ø¤# e£*Ñ,�Ø×"Ñ" 5Ö)ñ  ð Ðøô  ó 	Fæ Ø�ô �N‰NÐD×EÐEàÐûð	Fús   „(. ®
A!¸AÁA!c                 ó~  • [        U5      nU R                  nU(       aÁ  U(       aº  XT:  aµ  US-  n[        R                  S[	        U5      [	        U5      U R                  U-
  5         [        U R                  UUUS9nUR                  [        R                  :g  n	U	(       a  U R                  Xƒ5      u  pTnXPR                  X‚X5U5      -  nU(       a  U(       a  XT:  a  Mµ  U(       a:  XT:  a4  [        R                   " UR"                  5        [%        X%X@R                  S9egg! [        [        [        4 a     GM#  f = f)z9Attempt to resume the download if connection was dropped.rR   z<Attempting to resume incomplete download (%s/%s, attempt %d))r*   rY   )ÚretriesN)r%   rn   r5   rˆ   r   rf   rl   rc   r   ÚPARTIAL_CONTENTÚ_reset_download_staterx   ÚConnectionErrorr	   ÚOSErrorrB   ÚremoveÚnamer   )
rp   r   r'   r|   r)   r}   Úetag_or_last_modifiedÚattempts_leftÚresume_respÚmust_restarts
             r    ry   ÚDownloader._attempt_resumeç   s1  € ô !IÈÓ NÐà×,Ñ,ˆÞž}°Ó1NØ˜QÑˆMä�N‰NØNÜ˜NÓ+Ü˜LÓ)Ø×%Ñ%¨Ñ5ô	ðä0Ø—M‘MØØ .Ø2ñ	�ð  +×6Ñ6¼*×:TÑ:TÑT�Þà×2Ñ2°;ÓMñ H�NÐ2Gð ×"8Ñ"8Ø |À\ó#ñ �ö9 ž}°Õ1NöF ˜NÓ9Ü�IŠI�l×'Ñ'Ô(Ü)Ø l×<PÑ<Pñð ð :ˆ<øô	 $Ô%5´wÐ?ó Ûðús   Á(A#D" Ä"D<Ä;D<c                 ó|   • UR                  S5        UR                  5         Sn[        U5      n[        U5      nX4U4$ )zCReset the download state to restart downloading from the beginning.r   )ÚseekÚtruncater!   r%   )rp   r   r|   r}   r)   r“   s         r    rŽ   Ú Downloader._reset_download_state  sD   € ð 	×Ñ˜!ÔØ×ÑÔØˆÜ.¨tÓ4ˆÜ HÈÓ NÐàÐ-BÐBÐBr&   )rm   rn   rl   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   rN   r   rq   r   r   r~   r   r   r   rx   r   Úbytesrƒ   r‚   ry   rŽ   Ú__static_attributes__© r&   r    rh   rh   ž   s8  † ð.àð.ð ð.ð ð	.ð
 
ô.ð&˜Tð &¨Sð &°U¸3À¸8±_ô &ð0
àð
ð ð
ð ð	
ð
 ð
ð ˜s‘mð
ð 
ô
ð Ø˜u‘oðØ5=ðØQUðà	ôð&3àð3ð ð3ð ð	3ð
 ˜s‘mð3ð ð3ð 
ô3ðjCàðCð ðCð 
ˆs�H˜S‘M 8¨C¡=Ð0Ñ	1÷	Cr&   rh   c                   ód   • \ rS rSrS\S\S\SS4S jrS\\	   S	\S\\
\	\
\\4   4      4S
 jrSrg)ÚBatchDownloaderi+  rX   r(   rj   r   Nc                 ó&   • [        XU5      U l        g )N)rh   Ú_downloaderro   s       r    rq   ÚBatchDownloader.__init__,  s   € ô & g¸^ÓLˆÕr&   Úlinksrs   c              #   óR   #   • U H  nU R                  X25      u  pEX4U44v •  M     g7f)z0Download the files given by links into location.N©r¦   )rp   r¨   rs   r'   r{   rz   s         r    r~   ÚBatchDownloader.__call__4  s2   é € ó ˆDØ%)×%5Ñ%5°dÓ%EÑ"ˆHØ <Ð0Ð0Ô0ò ùs   ‚%'rª   )rœ   r�   rž   rŸ   r   rN   r   rq   r   r   r   r~   r¡   r¢   r&   r    r¤   r¤   +  sj   † ðMàðMð ðMð ð	Mð
 
ôMð1Ø˜d‘^ð1Ø/2ð1à	�%˜˜e C¨ H™oÐ-Ñ.Ñ	/÷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»      su  ðÙ .ã Û Û Û 	Ý ß 6Ó 6å 0Ý ;å Jß TÝ +Ý *Ý 5Ý 4ß RÑ Rß PÑ Pà	×	Ò	˜8Ó	$€ð (ð ¨x¸©}ô ðG°8ð GÀÈÁô Gð "#ñ0Ø
ð0à
ð0ð ð0ð ˜3‘-ð	0ð
 ˜#‘ð0ð ˆe�_õ0ðf&¨ð &°ô &ð(°3ð (È#ð (ÐRUô (ð hð °dð ¸sô ð0 "#Ø"ñ	Øðà
ðð ˜#‘ðð �s‰mð	ð
 õ÷0JCñ JC÷Z1ò 1r&   