a
    vHh                     @   s6   d dl Z d dlmZmZmZmZmZ G dd dZdS )    N)OptionalListAnyTupleDictc                   @   s   e Zd ZedddZddddZdeeeedf  e	e
eef  d	d
dZdeeeedf  ee
eef  d	ddZdeeeedf  dd	ddZddddZdd Zdd ZdS )SQLite)db_namec                 C   s   || _ d | _d S N)r   
connection)selfr    r   #/var/aqua_controller/core/sqlite.py__init__   s    zSQLite.__init__N)returnc              
   C   sp   | j d urtd| j dzt| j| _ W n< tjyj } z"td| j d| W Y d }~n
d }~0 0 d S )Nu   Соединение с u    уже установлено.u.   Ошибка при подключении к : )r
   
ValueErrorr   sqlite3connectErrorr   er   r   r   r      s    
zSQLite.connect.)queryparamsr   c              
      s   | j d u rtd| j dzzn| j  }|r<||| n
|| | }|jrddd |jD ng   fdd|D }|W W |r|  S  tj	y } z td| d| W Y d }~n
d }~0 0 W |r|  n|r|  0 d S )N/   Отсутствует соединение с .c                 S   s   g | ]}|d  qS r   r   .0descr   r   r   
<listcomp>-       z$SQLite.query_all.<locals>.<listcomp>c                    s   g | ]}t t |qS r   )dictzip)r   rowcolumnsr   r   r   .   r    8   Ошибка при выполнении запроса r   )
r
   r   r   cursorexecuteZfetchalldescriptioncloser   r   )r   r   r   r'   rowsresultr   r   r$   r   	query_all!   s(    


,
zSQLite.query_allc              
   C   s  | j d u rtd| j dzz| j  }|r<||| n
|| | }|d u rjW W |rf|  d S |jrdd |jD ng }tt	||}|W W |r|  S  t
jy } z td| d| W Y d }~n
d }~0 0 W |r|  n| r|  0 d S )Nr   r   c                 S   s   g | ]}|d  qS r   r   r   r   r   r   r   J   r    z$SQLite.query_one.<locals>.<listcomp>r&   r   )r
   r   r   r'   r(   Zfetchoner*   r)   r!   r"   r   r   )r   r   r   r'   r#   r%   r,   r   r   r   r   	query_one;   s2    


	,
zSQLite.query_onec              
   C   s   | j d u rtd| j dzz4| j  }|r<||| n
|| | j   W nD tjy } z*| j   td| d| W Y d }~n
d }~0 0 W |r|	  n|r|	  0 d S )Nr   r   r&   r   )
r
   r   r   r'   r(   Zcommitr   r   Zrollbackr*   )r   r   r   r'   r   r   r   r   r(   X   s    



,
zSQLite.executec              
   C   sh   | j d u rtdz| j   d | _ W n< tjyb } z"td| j d| W Y d }~n
d }~0 0 d S )Nu+   Соединение уже закрыто.u=   Ошибка при закрытии соединения с r   )r
   r   r*   r   r   r   r   r   r   r   r*   l   s    


zSQLite.closec                 C   s   |    | S r	   )r   )r   r   r   r   	__enter__v   s    zSQLite.__enter__c                 C   s   |    d S r	   )r*   )r   exc_typeZexc_valZexc_tbr   r   r   __exit__{   s    zSQLite.__exit__)N)N)N)__name__
__module____qualname__strr   r   r   r   r   r   r   r-   r.   r(   r*   r/   r1   r   r   r   r   r      s   ,, 
r   )r   typingr   r   r   r   r   r   r   r   r   r   <module>   s   