ó
    ñZjl  ã                   ó¤   • S SK r S SKrS SKJr  S SKJr  S SKJrJr  S SK	r	S SK
J
r
  SSKJr  \ " S S	5      5       r " S
 S5      r " S S\5      rg)é    N)Ú	dataclass)ÚPath)ÚOptionalÚUnion)Útqdmé   ©Úget_file_sha256c                   ót   • \ rS rSr% \\S'   \\\4   \S'   \R                  \S'   Sr
\\   \S'   Sr\\S'   S	rg)
ÚDownloadFileInputé   Úfile_urlÚ	save_pathÚloggerNÚsha256TÚverbose© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚstrÚ__annotations__r   r   ÚloggingÚLoggerr   r   r   ÚboolÚ__static_attributes__r   ó    ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/rapidocr/utils/download_file.pyr   r      s8   ‡ àƒMØ�S˜$�YÑÓØ�N‰NÓØ €FˆH�S‰MÓ Ø€GˆTÖr   r   c            	       ó`  • \ rS rSrSrSr\S\4S j5       r\	S\
4S j5       r\S\
S\\   S	\R                  S
\4S j5       r\S\S	\R                  S
\R&                  4S j5       r\S\R&                  S\
S	\R                  S
S4S j5       r\	S\\\
4   S\S
\4S j5       r\	S
\4S j5       rSrg)ÚDownloadFileé   é   é<   Úinput_paramsc                 ó*  • UR                   U l         [        UR                  5      nUR                  nU R	                  U5        U R                  X!R                  U5      (       a  g U R                  UR                  U5      nU R                  XBU5        g ©N)
r   r   r   r   Ú_ensure_parent_dir_existsÚ_should_skip_downloadr   Ú_make_http_requestr   Ú_save_response_with_progress)Úclsr%   r   r   Úresponses        r   ÚrunÚDownloadFile.run   s|   € à"×*Ñ*ˆŒä˜×/Ñ/Ó0ˆ	à×$Ñ$ˆØ×%Ñ% iÔ0Ø×$Ñ$ Y×0CÑ0CÀV×LÑLØà×)Ñ)¨,×*?Ñ*?ÀÓHˆØ×(Ñ(¨¸fÕEr   Úpathc                 ó8   • U R                   R                  SSS9  g )NT)ÚparentsÚexist_ok)ÚparentÚmkdir)r0   s    r   r(   Ú&DownloadFile._ensure_parent_dir_exists+   s   € à�‰×Ñ $°ÐÒ6r   Úexpected_sha256r   Úreturnc                 óô   • UR                  5       (       d  gUc  UR                  SU5        gU R                  X5      (       a$  U R                  (       a  UR                  SU5        gUR	                  SU5        g)NFz*File exists (no checksum verification): %sTzFile exists and is valid: %sz-File exists but is invalid, redownloading: %s)ÚexistsÚinfoÚcheck_file_sha256r   Úwarning)r,   r0   r7   r   s       r   r)   Ú"DownloadFile._should_skip_download/   sf   € ð �{‰{�}‰}ØàÑ"Ø�K‰KÐDÀdÔKØà× Ñ  ×7Ñ7Ø�{�{Ø—‘Ð:¸DÔAØà�‰ÐFÈÔMØr   Úurlc                 ó  • UR                  SU5         [        R                  " USU R                  S9nUR	                  5         U$ ! [        R
                   a&  nUR                  SU5        [        SU 35      UeS nAff = f)NzInitiating download: %sT)ÚstreamÚtimeoutzDownload failed: %szFailed to download )r;   ÚrequestsÚgetÚREQUEST_TIMEOUTÚraise_for_statusÚRequestExceptionÚerrorÚDownloadFileException)r,   r?   r   r-   Úes        r   r*   ÚDownloadFile._make_http_requestB   s|   € à�‰Ð-¨sÔ3ð	LÜ—|’| C°¸c×>QÑ>QÑRˆHØ×%Ñ%Ô'ØˆOøÜ×(Ñ(ó 	LØ�L‰LÐ.°Ô4Ü'Ð*=¸c¸UÐ(CÓDÈ!ÐKûð	Lús   ”1A ÁB Á!A;Á;B r-   r   Nc                 óö  • [        UR                  R                  SS5      5      nUR                  SUS-  S-  5        [	        USSU R                  5       (       + S9 n[        US5       nUR                  U R                  S	9 H.  nUR                  [        U5      5        UR                  U5        M0     S S S 5        S S S 5        UR                  S
U5        g ! , (       d  f       N)= f! , (       d  f       N2= f)Nzcontent-lengthr   zDownload size: %.2fMBr#   ÚiBT)ÚtotalÚunitÚ
unit_scaleÚdisableÚwb)Ú
chunk_sizezSuccessfully saved to: %s)ÚintÚheadersrD   r;   r   Úcheck_is_attyÚopenÚiter_contentÚ
BLOCK_SIZEÚupdateÚlenÚwrite)r,   r-   r   r   Ú
total_sizeÚprogress_barÚoutput_fileÚchunks           r   r+   Ú)DownloadFile._save_response_with_progressM   sØ   € ô ˜×)Ñ)×-Ñ-Ð.>ÀÓBÓCˆ
Ø�‰Ð+¨Z¸$Ñ->ÀÑ-EÔFäØØØØ×)Ñ)Ó+Ô+ò	
ð
 Ü�i Ô&¨+Ø%×2Ñ2¸c¿n¹nÐ2ÓM�EØ ×'Ñ'¬¨E«
Ô3Ø×%Ñ% eÖ,ñ N÷ '÷
ð 	�‰Ð/°Õ;÷ 'Õ&ú÷
õ 
ús%   ÁC*Á*ACÂ6C*Ã
C'	Ã#C*Ã*
C8Ú	file_pathÚ	gt_sha256c                 ó   • [        U 5      U:H  $ r'   r	   )rb   rc   s     r   r<   ÚDownloadFile.check_file_sha256a   s   € ä˜yÓ)¨YÑ6Ð6r   c                  ód   •  [         R                  R                  5       n U $ ! [         a     gf = f)NF)ÚsysÚstderrÚisattyÚAttributeError)Úis_interactives    r   rV   ÚDownloadFile.check_is_attye   s5   € ð	Ü ŸZ™Z×.Ñ.Ó0ˆNð Ðøô ó 	Ùð	ús   ‚" ¢
/®/r   )r   r   r   r   rY   rE   Úclassmethodr   r.   Ústaticmethodr   r(   r   r   r   r   r   r)   rC   ÚResponser*   r+   r   r<   rV   r   r   r   r   r!   r!      sC  † Ø€JØ€OàðFÐ0ó Fó ðFð ð7¨ó 7ó ð7ð ðØðØ*2°3©-ðØAHÇÁðà	óó ðð$ ðL Sð L°'·.±.ð LÀX×EVÑEVó Ló ðLð ð<Ø×(Ñ(ð<Ø59ð<ØCJÇ>Á>ð<à	ó<ó ð<ð& ð7 U¨3°¨9Ñ%5ð 7À#ð 7È$ó 7ó ð7ð ð˜4ó ó ór   r!   c                   ó   • \ rS rSrSrg)rI   én   r   N)r   r   r   r   r   r   r   r   rI   rI   n   s   † Úr   rI   )r   rg   Údataclassesr   Úpathlibr   Útypingr   r   rC   r   Úutilsr
   r   r!   Ú	ExceptionrI   r   r   r   Ú<module>rw      sQ   ðó Û 
Ý !Ý ß "ã Ý å "ð ÷ð ó ð÷Rñ Rôj	˜Iõ 	r   