U
    n/e                     @   sZ   d dl mZ ddlmZmZmZmZ d dlZd dl	m
Z ddlmZmZ G dd dZdS )    )Client   )create_table
insert_ddf	insert_df
drop_tableN)check
clickhousec                   @   sN   e Zd Zddi fddZdddZdddZdd	d
ZdddZdddZdS )
ClickHouseNTc              
   C   s   |dkst |tkr&tdt | || _tf |}z|j  W n& tk
rj } z|W 5 d}~X Y nX || _|| _|	dd| _
|	dd| _dS )a  _summary_

        Args:
            connection (dict, required): _description_. Defaults to None.
            verbose (bool, optional): _description_. Defaults to True.
            config (config, optional): _description_. Defaults to {}.

        Raises:
            Exception: _description_
            Exception: _description_
            Exception: _description_
            Exception: _description_
            e: _description_
        Nz/plase input `connection` or but got connection n_row_per_loopi  n_partition_per_block
   )typedict	Exception_verboser   
connectionconnect_client_connectionget_n_row_per_loop_n_partition_per_block)selfr   verboseconfigcliente r   9/tmp/pip-unpacked-wheel-t2z2wkof/dsmlibrary/clickhouse.py__init__	   s    
zClickHouse.__init__c                 C   s   t |tjtjfkr&tdt | |dkr6td|dkrFtd||jkrftd| d|j t| j|||\}}|dkr|jdkr| j	rt
d	| d
 n||S )a  _summary_

        Args:
            df (_type_, optional): _description_. Defaults to None.
            tableName (_type_, optional): _description_. Defaults to None.
            partition_by (_type_, optional): _description_. Defaults to None.

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

        Returns:
            _type_: _description_
        @Please input `df=<dask dataframe or pandas dataframe>`, but got NzPlease input `tableName`zPlease input `partition_by`zkey `z$` not found in columns, columns are F9   ztable z already exists!)r   pd	DataFrameddr   columnsr   r   coder   print)r   df	tableNameZpartition_bystatusr   r   r   r   get_or_createTable5   s    
zClickHouse.get_or_createTablec                 C   s   t |tjtjfkr&tdt | |dkrBtdt | dt |tjkrjt| j||| j| jd n(t |tjkrt	| j||| jd ndS dS )a?  _summary_

        Args:
            df (_type_, optional): _description_. Defaults to None.
            tableName (_type_, optional): _description_. Defaults to None.

        Raises:
            Exception: _description_
            Exception: _description_

        Returns:
            _type_: _description_
        r!   Nz%Expect `tableName` type str, but got z please input `tableName` str)r   Zddfr*   r   r   )r   r)   r*   r   zSome thing wrong!)
r   r#   r$   r%   r   r   r   r   r   r   )r   r)   r*   r   r   r   writeX   s    
zClickHouse.writec                 C   s&   |dkrt dt| | j|S )z_summary_

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

        Raises:
            Exception: _description_

        Returns:
            _type_: _description_
        Nz#plese input `sqlQuery` str but got )r   r   r   Zquery_dataframe)r   ZsqlQueryr   r   r   readv   s    zClickHouse.readc                 C   s,   |dkrt dt| t| j|| jdS )z_summary_

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

        Raises:
            Exception: _description_

        Returns:
            _type_: _description_
        Nz$plese input `tableName` str but got )r   
table_namer   )r   r   r   r   r   r   r*   r   r   r   	dropTable   s    zClickHouse.dropTablec                 C   s    t j|dtd tj| j|dS )zl_summary_

        Args:
            tableName (_type_, optional): _description_. Defaults to None.
        r*   )variableZvariableNameZdtype)r   r/   )r   Z
check_typestrr	   truncater   r0   r   r   r   truncateTable   s    zClickHouse.truncateTable)NNN)NN)N)N)N)	__name__
__module____qualname__r    r,   r-   r.   r1   r5   r   r   r   r   r
      s   ,
#


r
   )Zclickhouse_driverr   Zutils.clickhouser   r   r   r   Zpandasr#   Zdask.dataframeZ	dataframer%   utilsr   r	   r
   r   r   r   r   <module>   s
   