
    yi                       d dl mZ d dlZd dlZd dlmZ d dlZd dlZd dl	Z	d dl
mZ d dlmZ ej                  dk\  rd dlmZ nd dlmZ d dlZddlmZ  G d	 d
ed      Z ej(                   ej*                  d      d      Z ej.                  e      s	  ej0                  e       	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZdddZy# e$ r Y (w xY w)    )annotationsN)Callable)	TypedDict)      )Unpack   )downloadc                  h    e Zd ZU ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   y)_DownloadKwargs
str | Noneproxyzfloat | Nonespeedbooluse_cookiesz
bool | strverifyidresumeformat
user_agentz(Callable[[int, int | None], None] | NoneprogressN)__name__
__module____qualname____annotations__     I/home/ubuntu/.local/lib/python3.12/site-packages/gdown/cached_download.pyr   r      s6    NL66r   r   F)total~z.cache/gdownc           
     J   |i| t        d      | j                  dd      j                  dd      j                  dd      j                  d	d
      }t        j                  t        |      }t        j
                  |      r$|s"|st        d| t        j                         |S t        j
                  |      r|r	 t        |||       |S t        j                  t        d      }	 t        j                  t        j                  |             t        j                   t              }	 t        j                  |d      }	|rd| dnd}
t#        d| |	|d|
 d| ddd| |rt        |	||       t%        j&                  |      5  t)        j*                  |	|       ddd       | ||       |S # t        $ r&}t        |t        j                         Y d}~d}~ww xY w# t        $ r Y w xY w# 1 sw Y   VxY w# t,        $ r t)        j.                  |        w xY w)a  Cached download from URL.

    Parameters
    ----------
    url:
        URL. Google Drive URL is also supported.
    path:
        Output filename. Default is basename of URL.
    quiet:
        Suppress terminal output. Default is False.
    postprocess:
        Function called with filename as postprocess.
    hash:
        Hash value of file in the format of {algorithm}:{hash_value}
        such as sha256:abcdef.... Supported algorithms: md5, sha1, sha256, sha512.
    kwargs:
        Keyword arguments to be passed to `download`.

    Returns
    -------
    path:
        Output filename.

    Raises
    ------
    ValueError
        If url is not specified when path is not specified.
    DownloadError
        If the download fails.
    Nz0url must be specified when path is not specified/z-SLASH-:z-COLON-=z-EQUAL-?z
-QUESTION-zFile exists: )file)pathhashquiet_dl_lock)dirdlzHash: 
 zCached downloading...
zTo: )startoutput)urlr0   r)   log_messagesr   )
ValueErrorreplaceospjoin
cache_rootexistsprintsysstderr_assert_filehashAssertionErrorosmakedirsdirnameOSErrortempfilemkdtempr
   filelockFileLockshutilmove	Exceptionrmtree)r1   r'   r)   postprocessr(   kwargse	lock_path	temp_root	temp_pathlog_message_hashs              r   cached_downloadrQ   *   s   L |;OPPKKY'WS)$WS)$WS,'	 	 xx
D) zz$M$(szz:	D	d	&$T?K
 Z0I
CKK%&   Z0IHHY-	04VD6," 		
23C2DE b/			
 		
 )$eDy) 	)KK	4(	) DKI  	&!#**%%	&  &	) 	) i sO   =F5 ((G' +AH 
G6!H 5	G$>GG$'	G32G36G?;H  H"c                P   d|t         j                  vrt        d| dt         j                          t        t         |             }t	        | d      5 t        fdd      D ]  }|j                  |        	 d d d        | d|j                          S # 1 sw Y   xY w)Ni   zUnsupported hash algorithm: z. Supported algorithms: rbc                 &    j                         S )N)read)	BLOCKSIZEfs   r   <lambda>z#_compute_filehash.<locals>.<lambda>   s    !&&"3 r   r   r#   )hashlibalgorithms_guaranteedr3   getattropeniterupdate	hexdigest)r'   	algorithmalgorithm_instanceblockrV   rW   s       @@r   _compute_filehashrc      s    I555*9+ 6%%,%B%B$CE
 	

 5)46	dD	 -Q3S9 	-E%%e,	-- [,6689::- -s   'BB%c                    d|vrt        d| d      |j                  d      d   }t        | |      }||k7  rt        d| d|       y )Nr#   zInvalid hash: z9. Hash must be in the format of {algorithm}:{hash_value}.r   )r'   r`   z!File hash doesn't match:
actual: z
expected: )r3   splitrc   r=   )r'   r(   r)   r`   hash_actuals        r   r<   r<      ss    
$TF #F F
 	
 

3"I#CKd0\$P
 	
 r   )NNFNN)r1   r   r'   r   r)   r   rJ   zCallable[[str], object] | Noner(   r   rK   zUnpack[_DownloadKwargs]returnstr)r'   rh   r`   rh   rg   rh   )F)r'   rh   r(   rh   r)   r   rg   None)
__future__r   rY   r>   os.pathr'   r5   rF   r:   rB   collections.abcr   typingr   version_infor   typing_extensionsrD   r
   r   r6   
expanduserr7   r8   r?   rA   rQ   rc   r<   r   r   r   <module>rq      s   "  	   
  $ w(  	7iu 	7 SXXncnnS)>:
szz*J 26^	^
^ ^ 0	^
 ^ &^ 	^B; 
k  s   C	 	CC