
    B>qjG                         d Z ddlZddl ddlmZ ddlmZ ddlmZ ddlmZ	 ddlm
Z dd	lmZ  G d
 de      Zd Z G d de      Z G d de      Z G d de      Z G d de	      Z G d de      Z
y)an  
Peewee integration with APSW, "another python sqlite wrapper".

Project page: https://rogerbinns.github.io/apsw/

APSW is a really neat library that provides a thin wrapper on top of SQLite's
C interface.

Here are just a few reasons to use APSW, taken from the documentation:

* APSW gives all functionality of SQLite, including virtual tables, virtual
  file system, blob i/o, backups and file control.
* Connections can be shared across threads without any additional locking.
* Transactions are managed explicitly by your code.
* APSW can handle nested transactions.
* Unicode is handled correctly.
* APSW is faster.
    N)*)__exception_wrapper__)BooleanField)	DateField)DateTimeField)DecimalField)	TimeFieldc                        e Zd Z ed  ej
                         j                  d      D              Z fdZd Z	d Z
d Z fdZd Zd	 Zd
 Zd Zd Zd Zd Zd ZddZd Zd Z xZS )APSWDatabasec              #   2   K   | ]  }t        |        y wN)int).0is     Q/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/playhouse/apsw_ext.py	<genexpr>zAPSWDatabase.<genexpr>   s     Na3q6Ns   .c                 <    i | _         t        t        |   |fi | y r   )_modulessuperr   __init__)selfdatabasekwargs	__class__s      r   r   zAPSWDatabase.__init__    s    lD*8>v>    c                     || j                   |<   | j                         s!| j                         j                  ||       y y r   )r   	is_closed
connectioncreatemodule)r   mod_namemod_insts      r   register_modulezAPSWDatabase.register_module$   s6    "*h~~OO**8X>  r   c                     | j                   |= y r   )r   )r   r!   s     r   unregister_modulezAPSWDatabase.unregister_module)   s    MM(#r   c                     t        j                  | j                  fi | j                  }| j                  |j                  | j                  dz         	 | j                  |       |S #  |j                           xY w)Ni  )apsw
Connectionr   connect_params_timeoutsetbusytimeout_add_conn_hooksclose)r   conns     r   _connectzAPSWDatabase._connect,   sm    t}}D0C0CD==$ 45	  & 	JJLs   A) )A<c                 N    t         t        |   |       | j                  |       y r   )r   r   r,   _load_modules)r   r.   r   s     r   r,   zAPSWDatabase._add_conn_hooks7   s     lD1$74 r   c                 n    | j                   j                         D ]  \  }}|j                  ||        |S r   )r   itemsr    )r   r.   r!   r"   s       r   r1   zAPSWDatabase._load_modules;   s8    "&--"5"5"7 	2Hhh1	2r   c                 |    | j                   j                         D ]  \  }\  }}|fd}|j                  ||       ! y )Nc                 >     |        | j                   | j                  fS r   )stepfinalize)klasss    r   make_aggregatez5APSWDatabase._load_aggregates.<locals>.make_aggregateB   s    U^^<<r   )_aggregatesr3   createaggregatefunction)r   r.   namer8   
num_paramsr9   s         r   _load_aggregateszAPSWDatabase._load_aggregates@   sB    )-)9)9)?)?)A 	?%D%5*%* =((~>	?r   c                 l    | j                   j                         D ]  \  }}|j                  ||        y r   )_collationsr3   createcollation)r   r.   r<   fns       r   _load_collationszAPSWDatabase._load_collationsF   s4    ((..0 	+HD"  r*	+r   c                     | j                   j                         D ]%  \  }\  }}}|r|fnd} |j                  |||g|  ' y )N )
_functionsr3   createscalarfunction)r   r.   r<   rB   r=   deterministicargss          r   _load_functionszAPSWDatabase._load_functionsJ   sQ    59__5J5J5L 	C1D12z='4M#"D%D%%dB
BTB	Cr   c                 j    |j                  d       | j                  D ]  }|j                  |        y NT)enableloadextension_extensionsloadextension)r   r.   	extensions      r   _load_extensionszAPSWDatabase._load_extensionsO   s3      &)) 	*Iy)	*r   c                     | j                   j                  |       | j                         s3| j                         }|j	                  d       |j                  |       y y rL   )rN   addr   r   rM   rO   )r   rP   r.   s      r   load_extensionzAPSWDatabase.load_extensionT   sM    Y'~~??$D$$T*y)  r   c                 6    |j                   j                         S r   )r   last_insert_rowidr   cursors     r   _last_insert_rowidzAPSWDatabase._last_insert_rowid[   s      2244r   c                     	 |j                   j                         S # t        $ r' |j                  j                   j                         cY S w xY wr   )r   changesAttributeErrorrX   rW   s     r   rows_affectedzAPSWDatabase.rows_affected^   sD    	6$$,,.. 	6==++3355	6s    -AAc                 H    | j                         j                  d|z         y )Nz	begin %s;)rX   execute)r   	lock_types     r   beginzAPSWDatabase.begind   s    kI56r   c                     t         5  | j                         }|j                  j                         r
	 d d d        y|j	                  d       d d d        y# 1 sw Y   yxY w)NFzcommit;Tr   rX   r   getautocommitr_   r   curss     r   commitzAPSWDatabase.commitg   sU    " 	$;;=D,,.	$ 	$ LL#		$
 	$
    ,AAAc                     t         5  | j                         }|j                  j                         r
	 d d d        y|j	                  d       d d d        y# 1 sw Y   yxY w)NFz	rollback;Trc   re   s     r   rollbackzAPSWDatabase.rollbacko   sU    " 	&;;=D,,.	& 	& LL%		&
 	&
 rh   )deferred)__name__
__module____qualname__tupler'   sqlitelibversionsplitserver_versionr   r#   r%   r/   r,   r1   r>   rC   rJ   rQ   rT   rY   r]   ra   rg   rj   __classcell__r   s   @r   r   r      s{    N+@4+@+@+B+H+H+MNNN??
%	!
?+C
*
*567r   r   c                     |t        |      S y r   )str)svs     r   nhry   x   s    }1v r   c                        e Zd Z fdZ xZS )r   c                 D    t         t        |   |      }|
|xr dxs dS y )N   r   )r   r   db_value)r   rx   r   s     r   r}   zBooleanField.db_value}   s,    ,.q1=7<a r   )rl   rm   rn   r}   rs   rt   s   @r   r   r   |   s       r   r   c                       e Zd ZeZy)r   Nrl   rm   rn   ry   r}   rE   r   r   r   r          Hr   r   c                       e Zd ZeZy)r	   Nr   rE   r   r   r	   r	      r   r   r	   c                       e Zd ZeZy)r   Nr   rE   r   r   r   r      r   r   r   c                       e Zd ZeZy)r   Nr   rE   r   r   r   r      r   r   r   )__doc__r'   peeweer   r   _BooleanFieldr   
_DateFieldr   _DateTimeFieldr   _DecimalFieldr	   
_TimeFieldSqliteDatabaser   ry   rE   r   r   <module>r      st   $   ( 0 * 2 0 *X> Xv =  
 
 N = r   