U
    n/e!                     @   sX   d dl Z d dlZd dlmZ d dlmZ ddlmZ ddlm	Z	m
Z
 G dd deZdS )	    N)tqdm)CallbackIOWrapper   )Base)checkdatasetc                   @   s<   e Zd ZdddZdddZdddZdd	d
Zdd ZdS )DatasetManagerN c              
   C   s  t |tkr"tdt | dn$tj|sFtdtj| d|dkrVtdtj| j	 d| | j
d}|jd	krtd
| d|r|}ntj|}|dkr| ||n|}|dkrd| }tj| j	 d| j
||t|tj||dd}|jdkr6d}	|jdk r"| }	t|j d|	 | }
| jrX| |
d |
d< t|j}t|dD}t|dddd(}t|j|d}tj|
d |dd}W 5 Q R X W 5 Q R X |jdkrd}n| jrt|j  td|
d|i dd  |
 D }
|dkrt j!|d!d" tj| j	 d|
d#  d$| j
d!|id%}zt "| W n8 tk
r } z|
t|dd& W 5 d}~X Y nX |
d'dd( |
S ))an  _summary_

        Args:
            directory_id (_type_, optional): _description_. Defaults to None.
            file_path (_type_, optional): _description_. Defaults to None.
            description (str, optional): _description_. Defaults to "".
            lineage (_type_, optional): _description_. Defaults to None.

        Raises:
            Exception: _description_
            Exception: _description_
            Exception: _description_
            Exception: _description_
            Exception: _description_
            Exception: _description_

        Returns:
            _type_: _description_
        zfile_path expect `str` but got z&, or please input `file_path='<path>'`zfile z
 not foundNz-please input directory, like `directory=<id>`z/directory/headersi  z
directory z> not found or your dose not has permission to access directoryr	   /file/)namedescription	directorysizereplace)r   data)      i  z, urlrbBT   )totalunit
unit_scaleZunit_divisorreadF)r   verifyr   zSome thing wrong with datastoreuploadedc                 S   s   i | ]\}}|d kr||qS ))r   idmsgpath ).0keyvaluer"   r"   6/tmp/pip-unpacked-wheel-t2z2wkof/dsmlibrary/dataset.py
<dictcomp>P   s       z.DatasetManager.upload_file.<locals>.<dictcomp>lineage)r   ZdataNamer   z/setLineage/r   json)Zlineage_msgr(   created)r(   r(   )#typestr	Exceptionosr!   existsabspathrequestsget_discovery_api_jwt_headerstatus_codebasenameZ_check_fileExistspostintgetsizer*   	_internal_replace_minio_apistatst_sizeopenr   r   updateput_verboseprintcontentdecodeitemsr   Zcheck_lists_intcheck_http_status_code)selfdirectory_id	file_path	file_namer   r(   r   _resf_nametxtr   	file_sizeftZwrapped_fileZ	_uploadedrer"   r"   r&   upload_file
   s    


	(  
 zDatasetManager.upload_filec              	   C   s  |dkrt dtj| j d| d| jd}|jdkrFt d| | }tj| j d| d| jd}|jdkr~t d	| d
 }| jr| |}t|}t	j
| j|d }|dkrt	j
|rt	j
|st dnt	j
| j|d }t|jdd}| jr td| d d}t|ddd}	t|d0}
||D ]}|	t| |
| qHW 5 Q R X |	  |t	j
||d |S )a  _summary_

        Args:
            file_id (_type_, optional): _description_. Defaults to None.
            download_path (_type_, optional): _description_. Defaults to None.

        Raises:
            Exception: _description_
            Exception: _description_
            Exception: _description_
            Exception: _description_

        Returns:
            _type_: _description_
        Nzplease input file_idr   /r
   r   zFile response code z
/download/zsome thing wrong in datastorer   r   z1`download_path` is not existx or is not directoryzcontent-lengthr   ztotal size : z Br   ZiBT)r   r   r   wb)Zdownload_sucessf_path)r.   r2   r3   r4   r5   r6   r*   r;   r<   r/   r!   joinZ	_tmp_pathr0   isdirr9   r   rB   rC   r   r?   iter_contentr@   lenwriteclose)rH   file_iddownload_pathrL   meta_urlrW   Ztotal_size_in_bytes
block_sizeprogress_barrP   r   r"   r"   r&   download_filej   sB    




 
zDatasetManager.download_filec                 C   sl   t j|dtd t j|dttd tj| j|| jd}tj	| j d| j|||dd}t j
|d	 | S )
z_summary_

        Args:
            name (_type_, optional): _description_. Defaults to None.
            tags (_type_, optional): _description_. Defaults to None.

        Returns:
            _type_: _description_
        r   variablevariableNamedtypetags)rf   rg   rh   child)Zbase_uriri   headerz/api/v2/dataset/)r   titletagr)   response)r   
check_typer-   listr   Zget_tag_ids_base_discovery_apir5   r2   r8   rG   r*   )rH   r   ri   Ztags_idsrR   r"   r"   r&   createDataset   s    
zDatasetManager.createDatasetc                 C   sf   t j|dtd t j|dtd t j|dtd tj| j d| j|||dd}t j|d |	 S )	a6  _summary_

        Args:
            directory_id (_type_, optional): _description_. Defaults to None.
            name (_type_, optional): _description_. Defaults to None.
            description (_type_, optional): _description_. Defaults to None.

        Returns:
            _type_: _description_
        rI   re   r   r   z/api/v2/directory/)r   r   
parent_dirr)   rn   )
r   rp   r9   r-   r2   r8   rr   r5   rG   r*   )rH   rI   r   r   rR   r"   r"   r&   createDirectory   s    zDatasetManager.createDirectoryc                 C   s>   t j| j d| d| jd}|jdkr6td| | S )Nr   rU   r
   r   z!Cannot read meta data of file_id )r2   r3   r4   r5   r6   r.   r*   )rH   r^   rL   r"   r"   r&   get_meta_file   s    
zDatasetManager.get_meta_file)NNNr	   NN)NN)NN)NNN)__name__
__module____qualname__rT   rd   rs   ru   rv   r"   r"   r"   r&   r      s
   
`
8

r   )r/   r2   Z	tqdm.autor   Z
tqdm.utilsr   baser   utilsr   r   r   r"   r"   r"   r&   <module>   s   