
    wil                         d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	Z	d dl
m
Z
 ddlmZ e G d d	                      Z G d
 d          Z G d de          ZdS )    N)	dataclass)Path)OptionalUnion)tqdm   get_file_sha256c                   p    e Zd ZU eed<   eeef         ed<   ej        ed<   dZ	e
e         ed<   dZeed<   dS )DownloadFileInputfile_url	save_pathloggerNsha256Tverbose)__name__
__module____qualname__str__annotations__r   r   loggingLoggerr   r   r   bool     t/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/rapidocr/utils/download_file.pyr   r      sb         MMMS$YN FHSM   GTr   r   c            	       P   e Zd ZdZdZedefd            Zede	fd            Z
ede	dee         dej        d	efd
            Zededej        d	ej        fd            Zedej        de	dej        d	dfd            Zedeee	f         ded	efd            Zed	efd            ZdS )DownloadFile   <   input_paramsc                    |j         | _         t          |j                  }|j        }|                     |           |                     ||j        |          rd S |                     |j        |          }| 	                    |||           d S N)
r   r   r   r   _ensure_parent_dir_exists_should_skip_downloadr   _make_http_requestr   _save_response_with_progress)clsr!   r   r   responses        r   runzDownloadFile.run   s    "*/00	$%%i000$$Y0CVLL 	F)),*?HH((9fEEEEEr   pathc                 >    | j                             dd           d S )NT)parentsexist_ok)parentmkdir)r+   s    r   r$   z&DownloadFile._ensure_parent_dir_exists+   s#    $66666r   expected_sha256r   returnc                     |                                 sdS ||                    d|           dS |                     ||          r| j        r|                    d|           dS |                    d|           dS )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(   r+   r1   r   s       r   r%   z"DownloadFile._should_skip_download/   s     {{}} 	5"KKDdKKK4  77 	{ B:DAAA4FMMMur   urlc                    |                     d|           	 t          j        |d| j                  }|                                 |S # t          j        $ r.}|                    d|           t          d|           |d }~ww xY w)NzInitiating download: %sT)streamtimeoutzDownload failed: %szFailed to download )r5   requestsgetREQUEST_TIMEOUTraise_for_statusRequestExceptionerrorDownloadFileException)r(   r8   r   r)   es        r   r&   zDownloadFile._make_http_requestB   s    -s333	L|Cc>QRRRH%%'''O( 	L 	L 	LLL.444'(Cc(C(CDD!K	Ls   1A
 
B)BBr)   r   Nc                 2   t          |j                            dd                    }|                    d|dz  dz             t	          |dd|                                            5 }t          |d          5 }|                    | j        	          D ]9}|	                    t          |                     |                    |           :	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                    d
|           d S )Nzcontent-lengthr   zDownload size: %.2fMBr   iBT)totalunit
unit_scaledisablewb)
chunk_sizezSuccessfully saved to: %s)intheadersr=   r5   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'   z)DownloadFile._save_response_with_progressM   s    )--.>BBCC
+Z$->-EFFF))+++	
 
 
 		-
 i&& -+%22cn2MM - -E ''E

333%%e,,,,-- - - - - - - - - - - - - - -		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 	/;;;;;s7   +C6<ACC6C#	#C6&C#	'C66C:=C:	file_path	gt_sha256c                 (    t          |           |k    S r#   r	   )rY   rZ   s     r   r6   zDownloadFile.check_file_sha256a   s    y))Y66r   c                  h    	 t           j                                        } n# t          $ r Y dS w xY w| S )NF)sysstderrisattyAttributeError)is_interactives    r   rN   zDownloadFile.check_is_attye   sD    	 Z..00NN 	 	 	55	s   ! 
//)r   r   r   rQ   r>   classmethodr   r*   staticmethodr   r$   r   r   r   r   r   r%   r<   Responser&   r'   r   r6   rN   r   r   r   r   r      s       JOF0 F F F [F 7 7 7 7 \7 *23-AH	   [$ LS L'. LXEV L L L [L <(<59<CJ><	< < < [<& 7U39%5 7# 7$ 7 7 7 \7 4    \  r   r   c                       e Zd ZdS )rB   N)r   r   r   r   r   r   rB   rB   n   s        Dr   rB   )r   r]   dataclassesr   pathlibr   typingr   r   r<   r   utilsr
   r   r   	ExceptionrB   r   r   r   <module>rk      s    



 ! ! ! ! ! !       " " " " " " " "        " " " " " "        R R R R R R R Rj	 	 	 	 	I 	 	 	 	 	r   