Ë
    ��hF+  ã                   óì  — 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jL                  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$«      Z4y)'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                 óh   — 	 t        | j                  d   «      S # t        t        t        f$ r Y y w xY w)Nzcontent-length)ÚintÚheadersÚ
ValueErrorÚKeyErrorÚ	TypeError©r   s    ú\/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/pip/_internal/network/download.pyÚ_get_http_response_sizer!      s5   € ðÜ�4—<‘<Ð 0Ñ1Ó2Ð2øÜœ¤)Ð,ò Ùðús   ‚ š1°1c                 ól   — | j                   j                  d| j                   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¡L×$4Ñ$4°_Ó$EÓFÐFó    ÚlinkÚprogress_barÚtotal_lengthÚrange_startc                 ó`  — |j                   t        j                  k(  r|j                  }n|j                  }t        |«      }|r1|r|› dt        |«      › dt        |«      › d�}n|› dt        |«      › d�}t        | «      rt        j                  d|«       n/|rt        j                  d|«       nt        j                  d|«       t        j                  «       t        j                  kD  rd}nt        | «      rd}n|sd}n
|d	kD  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‰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áØˆä-Ø LÀ;ô€Hñ �FÓÐr&   Úfilenamec                 ó@   — t         j                  j                  | «      S )zJ
    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                 ó¢   — t         j                  j                  «       }| |d<   |j                  d«      }|rt	        t        |«      «      }|xs |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   sM   € ô
 	�‰×ÑÓ€AØ+€A€nÑØ�{‰{˜:Ó&€HÙô -¬S°«]Ó;ˆØÒ'Ð'Ð'r&   c                 ó˜  — |j                   }| j                  j                  d«      }|rt        ||«      }t	        |«      d   }|s6t        j                  | j                  j                  dd«      «      }|r||z  }|sL|j                  | j                  k7  r3t        j                  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ÐÙÜ,Ð-@À(Ó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                 óf  — |j                   j                  dd«      d   }t        j                  «       }|r	d|› d�|d<   |r||d<   	 | j	                  ||d¬	«      }t        |«       |S # t        $ r?}|j                  €J ‚t        j                  d
|j                  j                  |«       ‚ d }~ww xY w)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ˆ�ÑáØ&ˆ�
ÑðØ�{‰{˜:¨w¸tˆ{ÓDˆÜ˜Ôð
 €Køô	 "ò Ø�z‰zÐ%Ð%Ð%Ü�‰Ð8¸!¿*¹*×:PÑ:PÐRVÔWØûðús   ÁA( Á(	B0Á1:B+Â+B0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y)Ú
DownloaderrX   r(   Úresume_retriesr   Nc                 óF   — |dk\  sJ d«       ‚|| _         || _        || _        y )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__Ÿ   s5   € ð ˜aÒð	JàIó	JØàˆŒØ)ˆÔØ-ˆÕr&   r'   Úlocationc                 ó†  — t        | j                  |«      }t        |«      }|j                  j	                  dd«      }t        ||«      }t        j                  j                  ||«      }t        |d«      5 }| j                  |||d|«      }	|r|	|k  r| j                  |||||	«       ddd«       ||fS # 1 sw Y   ||fS xY w)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ˆô /¨tÓ4ˆØ—|‘|×'Ñ'¨¸Ó;ˆä.¨t°TÓ:ˆÜ—7‘7—<‘< ¨(Ó3ˆä�(˜DÓ!ð 	 \Ø!×3Ñ3Ø�d˜L¨!¨\óˆNñ  °Ò =Ø×$Ñ$Ø˜$ ¨l¸Nô÷	ð ˜Ð%Ð%÷	ð ˜Ð%Ð%ús   Á62B4Â4C r   rz   r{   r)   c                 óp   — t        ||| j                  ||¬«      }| 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Ä   sE   € ô #Ø�$˜×*Ñ*¨LÀnô
ˆð ×)Ñ)Ø�L´°\Ó0Bð *ó 
ð 	
r&   r=   r~   c                óº   — d}	 |D ]!  }|t        |«      z  }|j                  |«       Œ# 	 |S # t        $ r$}|s|‚t        j	                  d«       Y d}~|S d}~ww xY w)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Ô   sv   € ð ˆð
	FØò *�Ø¤# e£*Ñ,�Ø×"Ñ" 5Õ)ñ*ð Ðøô  ò 	Fá Ø�ô �N‰NÐD×EÐEàÐûð	Fús   „&- ­	A¶AÁAc                 óT  — t        |«      }| j                  }|r´|r²||k  r­|dz  }t        j                  dt	        |«      t	        |«      | j                  |z
  «       	 t        | j                  |||¬«      }|j                  t        j                  k7  }	|	r| j                  ||«      \  }}}|| j                  |||||«      z  }|r|r||k  rŒ­|r>||k  r8t        j                   |j"                  «       t%        |||| j                  ¬«      ‚yy# t        t        t        f$ r Y �Œw xY w)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ç   sE  € ô !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 LÐ2Gð  $×"8Ñ"8Ø  |°^À\ó#ñ �ñ9 ™}°À,Ó1NñF ˜N¨\Ò9Ü�I‰I�l×'Ñ'Ô(Ü)Ø�n l¸D×<PÑ<Pôð ð :ˆ<øô	 $Ô%5´wÐ?ò Úðús   ÁA&D ÄD'Ä&D'c                 ó~   — |j                  d«       |j                  «        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  sF   € ð 	×Ñ˜!ÔØ×ÑÔØˆÜ.¨tÓ4ˆÜ HÈÓ 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   ž   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                   óX   — 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
y)
ÚBatchDownloaderrX   r(   ri   r   Nc                 ó(   — t        |||«      | _        y )N)rh   Ú_downloaderrn   s       r    rp   zBatchDownloader.__init__,  s   € ô & g¨|¸^ÓLˆÕr&   Úlinksrq   c              #   óT   K  — |D ]  }| j                  ||«      \  }}|||ff–— Œ! y­w)z0Download the files given by links into location.N)r�   )ro   rž   rq   r'   ry   rx   s         r    r|   zBatchDownloader.__call__4  s>   è ø€ ð ò 	1ˆDØ%)×%5Ñ%5°d¸HÓ%EÑ"ˆH�lØ˜ <Ð0Ð0Ó0ñ	1ùs   ‚&()r•   r–   r—   r   rN   r   rp   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¯      sw  ðÙ .ã Û Û Û 	Ý ß 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&   