o
    Ďi$G                     @   s`  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZ d dlmZ d dlmZmZ d dlmZmZ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m Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( d dl)m*Z* dZ+e ,e-Z.G dd de*e" Z/G dd de*e# Z0G dd de*e$ Z1G dd de*e% Z2de3de3ddfddZ4de3de3dB de5ddfd d!Z6d"e3ddfd#d$Z7d%ed&e&de8fd'd(Z9d%ed&e$de:e;e3 e5f fd)d*Z<d&e$de3dB de3fd+d,Z=d&e$defd-d.Z>d&e#de3dB de
fd/d0Z?d&e%de3dB defd1d2Z@d&e"defd3d4ZAd&e"d5e3defd6d7ZBdS )8    N)ApiDownloadDataFileRequestApiDownloadDataFilesRequest)ApiDownloadDatasetRequestApiGetDatasetRequest)KaggleClient)ApiDownloadKernelOutputRequestApiGetKernelRequest)&ApiDownloadModelInstanceVersionRequestApiGetModelInstanceRequest'ApiListModelInstanceVersionFilesRequest)
thread_map)Cache)build_kaggle_clientdownload_file)get_kaggle_credentials)UnauthenticatedErrorhandle_call)CompetitionHandleDatasetHandleModelHandleNotebookHandleResourceHandle)PackageScope)Resolver   c                   @   \   e Zd ZdefddZ	dddddededB d	edB d
edB deeedB f f
ddZ	dS )CompetitionHttpResolverreturnc                 O      dS NT self___r    r    S/home/jeff/fluffinator/venv/lib/python3.10/site-packages/kagglehub/http_resolver.pyis_supported!      z$CompetitionHttpResolver.is_supportedNFforce_download
output_dirhpathr)   r*   c             	      s:  t   t|d}|||}|r|r||| d }t s/|r,|d fW  d    S t |||}|r@t||t|d |rt	j
t	j|dd zt||t fdd|}t||||dd}	W n tjjy   |r|d f Y W  d    S  w |	s|r|d fW  d    S npt|||}
t	j
t	j|
dd zt fdd|}t||
||}	W n$ tjjy   |rt	j|
rt	|
 |d f Y W  d    S  w |	s|rt	j|
rt	|
 |d fW  d    S t|
| t	|
 ||| |d fW  d    S 1 sw   Y  d S )	Noverride_dirr)   Texist_okc                          j jS N)competitionscompetition_api_clientdownload_data_filer    
api_clientrr    r%   <lambda>D       z2CompetitionHttpResolver._resolve.<locals>.<lambda>extract_auto_compressed_filec                      r2   r3   )r4   r5   download_data_filesr    r7   r    r%   r:   X   r;   )r   r   load_from_cachedelete_from_cacher   r   get_path_prepare_output_dirboolosmakedirsr,   dirname(_build_competition_download_file_requestr   r   requests
exceptionsConnectionError)_build_competition_download_files_requestget_archive_pathexistsremove_extract_archivemark_as_complete)r"   r+   r,   r)   r*   cachecached_pathout_pathresponsedownload_neededarchive_pathr    r7   r%   _resolve%   sx   






%


3

:
&z CompetitionHttpResolver._resolver3   )
__name__
__module____qualname__rC   r&   r   strtupleintrW   r    r    r    r%   r       "    r   c                   @   r   )DatasetHttpResolverr   c                 O   r   r   r    r!   r    r    r%   r&   o   r'   z DatasetHttpResolver.is_supportedNFr(   r+   r,   r)   r*   c          
         sb  t   | s|t |}t|d}|||}|r+|s+||jfW  d    S |r5|r5||| |r@t||t	|d t
|||||}|rktjtj|dd t fdd|}t|||dd n*||}	tjtj|	dd t fdd|}t||	| t|	| t|	 ||| ||jfW  d    S 1 sw   Y  d S )	Nr-   r/   Tr0   c                      r2   r3   datasetsdataset_api_clientdownload_datasetr    r7   r    r%   r:      r;   z.DatasetHttpResolver._resolve.<locals>.<lambda>r<   c                      r2   r3   r`   r    r7   r    r%   r:      r;   )r   is_versionedwith_version_get_current_versionr   r?   versionr@   rB   rC   _build_dataset_download_requestrA   rD   rE   r,   rF   r   r   rL   rO   rN   rP   )
r"   r+   r,   r)   r*   rQ   dataset_pathrS   rT   rV   r    r7   r%   rW   s   s6   




$zDatasetHttpResolver._resolver3   )
rX   rY   rZ   rC   r&   r   r[   r\   r]   rW   r    r    r    r%   r_   n   r^   r_   c                   @   r   )ModelHttpResolverr   c                 O   r   r   r    r!   r    r    r%   r&      r'   zModelHttpResolver.is_supportedNFr(   r+   r,   r)   r*   c                   s  t  ʉ  st t|d}||}|r+|s+|jfW  d    S |r7t||t|d n
|rA|rA|	| t
||||rltjtjdd t fdd}t|dd nOt \}}	|	r|}
tjtj|
dd t fdd}t||
 t|
 t|
 nd	td
d f fdd}t||dt| ddd || jfW  d    S 1 sw   Y  d S )Nr-   r/   Tr0   c                      r2   r3   modelsmodel_api_clientdownload_model_instance_versionr    r7   r    r%   r:      r;   z,ModelHttpResolver._resolve.<locals>.<lambda>r<   c                      r2   r3   rk   r    r7   r    r%   r:      r;   filer   c                    sR   t j| }t jt j|dd t|  t fdd}t|| d S )NTr0   c                      r2   r3   rk   r    r7   r    r%   r:      r;   zJModelHttpResolver._resolve.<locals>._inner_download_file.<locals>.<lambda>)rD   r,   joinrE   rF   _build_model_download_requestr   r   )ro   file_out_pathrT   )r8   r+   rS   )r9   r%   _inner_download_file   s   
z8ModelHttpResolver._resolve.<locals>._inner_download_filezDownloading z files   )descmax_workers)r   rd   re   rf   r   r?   rg   rB   rC   r@   rq   rA   rD   rE   r,   rF   r   r   _list_model_filesrL   rO   rN   r[   r   lenrP   )r"   r+   r,   r)   r*   rQ   
model_pathrT   fileshas_morerV   rs   r    )r8   r+   rS   r9   r%   rW      sL   



	$zModelHttpResolver._resolver3   )
rX   rY   rZ   rC   r&   r   r[   r\   r]   rW   r    r    r    r%   rj      r^   rj   c                   @   r   )NotebookOutputHttpResolverr   c                 O   r   r   r    r!   r    r    r%   r&      r'   z'NotebookOutputHttpResolver.is_supportedNFr(   r+   r,   r)   r*   c          
         sd  t   | s|t |}t|d}|||}|r+|s+||jfW  d    S |r7t||t|d n
|rA|rA|	|| t
|||||}|rltjtj|dd t fdd|}t|||dd n*||}	tjtj|	dd t fdd|}t||	| t|	| t|	 ||| ||jfW  d    S 1 sw   Y  d S )	Nr-   r/   Tr0   c                      r2   r3   kernelskernels_api_clientdownload_kernel_outputr    r7   r    r%   r:     r;   z5NotebookOutputHttpResolver._resolve.<locals>.<lambda>r<   c                      r2   r3   r}   r    r7   r    r%   r:     r;   )r   rd   re   rf   r   r?   rg   rB   rC   r@    _build_notebook_download_requestrA   rD   rE   r,   rF   r   r   rL   rO   rN   rP   )
r"   r+   r,   r)   r*   rQ   notebook_pathrS   rT   rV   r    r7   r%   rW      s6   




$z#NotebookOutputHttpResolver._resolver3   )
rX   rY   rZ   rC   r&   r   r[   r\   r]   rW   r    r    r    r%   r|      r^   r|   rV   rS   r   c                 C   s   t j|dd td t| r.t| }|| W d    d S 1 s'w   Y  d S t	| rQt
| d}|| W d    d S 1 sJw   Y  d S d}t|)NTr0   zExtracting files...r9   zUnsupported archive type.)rD   rE   loggerinfotarfile
is_tarfileopen
extractallzipfile
is_zipfileZipFile
ValueError)rV   rS   fmsgr    r    r%   rO   &  s   

"
"rO   r*   r,   r)   c                C   s   |r-t j| |}t j|r |sd| d}t|t | t jt j|dd d S t j| r[t j| rBd|  }t|t 	| rY|sSd|  d}t|t
|  d S d S t j| dd d S )Nz#File already exists at output_dir: z(. Set force_download=True to replace it.Tr0   zoutput_dir points to a file: zoutput_dir is not empty: )rD   r,   rp   rM   FileExistsErrorrN   rE   rF   isfilelistdir_clear_directory)r*   r,   r)   target_pathr   r    r    r%   rB   6  s(   


rB   	directoryc                 C   sD   t | D ]}t j| |}t j|rt| qt | qd S r3   )rD   r   r,   rp   isdirshutilrmtreerN   )r   entry
entry_pathr    r    r%   r   P  s   r   r8   r+   c                    s   t |}|d ur|S t|tr0t |j_|j_|	 _
|j_t fdd}|jS t|trLt |j_|j_t fdd}|jS t|trit |j_|j_t fdd}|jjS d| }t|)Nc                      r2   r3   )rl   rm   get_model_instancer    r7   r    r%   r:   e  r;   z&_get_current_version.<locals>.<lambda>c                      r2   r3   )ra   rb   get_datasetr    r7   r    r%   r:   l  r;   c                      r2   r3   )r~   r   
get_kernelr    r7   r    r%   r:   s  r;   zInvalid ResourceHandle type )r   get_version
isinstancer   r
   owner
owner_slugmodel
model_slugframework_enum	framework	variationinstance_slugr   version_numberr   r   datasetdataset_slugcurrent_version_numberr   r   	user_namenotebookkernel_slugmetadatar   )r8   r+   version_from_package_scopemodel_instancer   rT   r   r    r7   r%   rf   Y  s2   





rf   c                    sH   t |t fdd}g }|jD ]}||j q|jdk}||fS )Nc                      r2   r3   )rl   rm   !list_model_instance_version_filesr    r7   r    r%   r:   ~  r;   z#_list_model_files.<locals>.<lambda> )0_build_list_model_instance_version_files_requestr   rz   appendnamenext_page_token)r8   r+   rT   rz   r   r{   r    r7   r%   rw   |  s   

rw   c                 C   sR   |   s
d}t|t }| j|_| j|_|  |_| j	|_
| j|_|r'||_|S NzNo version provided)rd   r   r	   r   r   r   r   r   r   r   r   rg   r   r,   r+   r,   r   r9   r    r    r%   rq     s   
rq   c                 C   sN   |   s
d}t|t }| j|_| j|_|  |_| j	|_
| j|_t|_|S r   )rd   r   r   r   r   r   r   r   r   r   r   rg   r   MAX_NUM_FILES_DIRECT_DOWNLOAD	page_size)r+   r   r9   r    r    r%   r     s   
r   c                 C   @   |   s
d}t|t }| j|_| j|_| j|_|r||_	|S r   )
rd   r   r   r   r   r   r   rg   dataset_version_number	file_namer   r    r    r%   rh     s   rh   c                 C   r   r   )
rd   r   r   r   r   r   r   rg   r   	file_pathr   r    r    r%   r     s   r   c                 C   s   t  }| j|_|S r3   )r   competitioncompetition_name)r+   r9   r    r    r%   rK     s   rK   ro   c                 C   s   t  }| j|_||_|S r3   )r   r   r   r   )r+   ro   r9   r    r    r%   rG     s   rG   )CloggingrD   r   r   r   rH   4kagglesdk.competitions.types.competition_api_servicer   r   ,kagglesdk.datasets.types.dataset_api_servicer   r   kagglesdk.kaggle_clientr   +kagglesdk.kernels.types.kernels_api_servicer   r   (kagglesdk.models.types.model_api_servicer	   r
   r   tqdm.contrib.concurrentr   kagglehub.cacher   kagglehub.clientsr   r   kagglehub.configr   kagglehub.exceptionsr   r   kagglehub.handler   r   r   r   r   kagglehub.packagesr   kagglehub.resolverr   r   	getLoggerrX   r   r   r_   rj   r|   r[   rO   rC   rB   r   r]   rf   r\   listrw   rq   r   rh   r   rK   rG   r    r    r    r%   <module>   sH    
N7M4	"#