
    B>qj(                     ^   d dl 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 d dlmZ d dl	m
Z
 d d	lmZmZmZmZmZmZmZmZmZmZmZmZ d d
lmZ 	 d dlZ e j:                  d      ZddZddZ  G d de      Z! G d de      Z" G d de
e"      Z#de_$        y# e$ rZ ed      dZ[ww xY w)    N)Path)DecimalField)ImproperlyConfigured)OP)SqliteDatabase)__exception_wrapper__)_PooledSqliteDatabase)
RowIDField
DocIDFieldAutoIncrementFieldISODateTimeFieldJSONPath	JSONBPath	JSONField
JSONBFieldSearchFieldVirtualModelFTSModel	FTS5Model)rankzcysqlite is not installedpeeweec                 (      fd}t        |      S )Nc                 @    t        j                        }r|d   S |S )N   )cysqlitestatus)selfresultflagreturn_highwaters     U/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/playhouse/cysqlite_ext.pygetterz__status__.<locals>.getter#   s"    &,vay8&8    property)r   r    r"   s   `` r!   
__status__r&   "   s    9 Fr#   c                 ,      fd}t        |      S )z
    Expose a sqlite3_dbstatus() call for a particular flag as a property of
    the Database instance. Unlike sqlite3_status(), the dbstatus properties
    pertain to the current connection.
    c                     | j                   j                  t        d      | j                   j                  j                        }r|d   S r|d   S |S )Nzdatabase connection not opened.r   r   )_stateconnr   r   )r   r   r   return_currentr    s     r!   r"   z__dbstatus__.<locals>.getter.   sW    ;;#&'HII!!((.!9,vay8&8r#   r$   )r   r    r+   r"   s   ``` r!   __dbstatus__r,   (   s    9 Fr#   c                   (     e Zd ZdZd Z fdZ xZS )TDecimalFieldTEXTc                      y N r   s    r!   get_modifierszTDecimalField.get_modifiers;   s    r#   c                 B    |t        t        t        |   |            S y r1   )strsuperr   db_value)r   value	__class__s     r!   r8   zTDecimalField.db_value=   s%    u\49%@AA r#   )__name__
__module____qualname__
field_typer4   r8   __classcell__r:   s   @r!   r.   r.   8   s    J!B Br#   r.   c                       e Zd Zej                  Zd fd	Zd Z fdZd Z	d Z
d Zd Zd	 Zd
 Z	 	 d dZd Zd dZd Zd Zd Zd Zd!dZddej0                  dfdZd"dZd#dZd Zd Zed        Zd$dZ 	 	 d%dZ!	 	 d%dZ" e#ejH                        Z% e#ejL                  d      Z' e#ejP                        Z) e#ejT                        Z+ e#ejX                        Z- e#ej\                  d      Z/ e#ej`                        Z1 e#ejd                        Z3 e#ejh                  d      Z5 e6ejn                        Z8 e6ejr                  d      Z: e6ejv                  d      Z< e6ejz                  d      Z> e6ej~                  dd      Z@ e6ej                  dd      ZB e6ej                  dd      ZD e6ej                  dd      ZF e6ej                  dd      ZH e6ej                  dd      ZJ xZKS )&CySqliteDatabaseTc                 H   t        t        | 
  |g|i | g | _        d | _        d | _        d | _        d | _        d | _        d | _	        |rW| j                  t        j                  d       | j                  t        j                  d       | j                  t        d       y y )Nfts_bm25
fts_lucenefts_rank)r7   rB   __init___table_functions_commit_hook_rollback_hook_update_hook_authorizer_trace	_progressregister_functionr   	rank_bm25rank_lucener   )r   databaserank_functionsargskwargsr:   s        r!   rG   zCySqliteDatabase.__init__F   s    .xI$I&I " " ""8#5#5zB""8#7#7F""44 r#   c                     t         t        d      t        j                  | j                  f| j                  dd| j
                  }	 | j                  |       |S # t        $ r |j                           w xY w)Nzcysqlite is not installed.T)timeout
extensions)	r   r   
ConnectionrR   _timeoutconnect_params_add_conn_hooks	Exceptionclose)r   r*   s     r!   _connectzCySqliteDatabase._connectV   s    &'CDD""4== K$--.2K6:6I6IK	  &   	JJL	s   
A A8c                 V   | j                   |j                  | j                          | j                  |j                  | j                         | j                  |j                  | j                         | j                  |j                  | j                         | j                   |j                  | j                    | j                   |j                  | j                    t        t        | ;  |       | j                  r#| j                  D ]  }|j!                  |        y y r1   )rI   commit_hookrJ   rollback_hookrK   update_hookrL   
authorizerrM   tracerN   progressr7   rB   r\   rH   register)r   r*   table_functionr:   s      r!   r\   z CySqliteDatabase._add_conn_hooksb   s    (T../*t223(T../'OOD,,-;;"DJJ$>>%DMM4>>*5d;  "&"7"7 .''-. !r#   c                 P    | j                   D ]  \  }}|j                  ||        y r1   )_pragmaspragma)r   r*   rk   r9   s       r!   _set_pragmaszCySqliteDatabase._set_pragmast   s'    !]] 	'MFEKK&	'r#   c                 l    | j                   j                         D ]  \  }}|j                  ||        y r1   )	_attacheditemsattach)r   r*   namedbs       r!   _attach_databasesz"CySqliteDatabase._attach_databasesx   s0    ,,. 	"HD"KKD!	"r#   c                 t    | j                   j                         D ]  \  }\  }}|j                  |||        y r1   )_aggregatesro   create_aggregater   r*   rq   klass
num_paramss        r!   _load_aggregatesz!CySqliteDatabase._load_aggregates|   s<    )-)9)9)?)?)A 	;%D%5*!!%z:	;r#   c                 l    | j                   j                         D ]  \  }}|j                  ||        y r1   )_collationsro   create_collation)r   r*   rq   fns       r!   _load_collationsz!CySqliteDatabase._load_collations   s4    ((..0 	,HD"!!"d+	,r#   c                 x    | j                   j                         D ]  \  }\  }}}|j                  ||||        y r1   )
_functionsro   create_function)r   r*   rq   r~   ry   deterministics         r!   _load_functionsz CySqliteDatabase._load_functions   s@    59__5J5J5L 	F1D12z=  T:}E	Fr#   c                 t    | j                   j                         D ]  \  }\  }}|j                  |||        y r1   )_window_functionsro   create_window_functionrw   s        r!   _load_window_functionsz'CySqliteDatabase._load_window_functions   s>    )-)?)?)E)E)G 	A%D%5*''tZ@	Ar#   Nc                 F   t        |t              rt        |t        j                        s#t        j                  j                  ||||      }n	|||_        | j                  j                  |       | j                         s |j                  | j                                y y r1   )
isinstancetype
issubclassr   TableFunctionfrom_functionrq   rH   append	is_closedrg   
connection)r   rx   rq   columnsparamss        r!   register_table_functionz(CySqliteDatabase.register_table_function   s    5$'uh&<&<=**88g9?AEEJ$$U+~~NN4??,-  r#   c                     t        | j                        D ]  \  }}|j                  |k(  s n y| j                  j                  |       y)NFT)	enumeraterH   rq   pop)r   rq   idxrx   s       r!   unregister_table_functionz*CySqliteDatabase.unregister_table_function   sK    #D$9$9: 	JCzzT!	 !!#&r#   c                       fd}|S )Nc                 0    j                  |        | S r1   )r   )objr   rq   r   r   s    r!   	decoratorz2CySqliteDatabase.table_function.<locals>.decorator   s    ((dGVDJr#   r2   )r   rq   r   r   r   s   ```` r!   rh   zCySqliteDatabase.table_function   s    	 r#   c                 r    || _         | j                         s| j                         j                  |       |S r1   )rI   r   r   ra   r   r~   s     r!   	on_commitzCySqliteDatabase.on_commit   .    ~~OO))"-	r#   c                 r    || _         | j                         s| j                         j                  |       |S r1   )rJ   r   r   rb   r   s     r!   on_rollbackzCySqliteDatabase.on_rollback   s.     ~~OO++B/	r#   c                 r    || _         | j                         s| j                         j                  |       |S r1   )rK   r   r   rc   r   s     r!   	on_updatezCySqliteDatabase.on_update   r   r#   c                 r    || _         | j                         s| j                         j                  |       |S r1   )rL   r   r   rd   r   s     r!   rd   zCySqliteDatabase.authorizer   s.    ~~OO((,	r#   c                     |d | _         n
|||f| _         | j                         s-|dn| j                   } | j                         j                  |  |S Nr1   )rM   r   r   re   )r   r~   mask
expand_sqlrT   s        r!   re   zCySqliteDatabase.trace   sQ    :DKtZ0DK~~ j7dkkD#DOO##T*	r#   2   c                     t        j                  |xs d      fd}| j                  |t        j                  |       |S )Nzpeewee.cysqlite_extc                 J    |sy |dz  }|k\  rj                  d||       y y )Ni@B zSlow query %0.1fms: %s)log)eventsidsqlnsmslevelr   threshold_mss        r!   rM   z/CySqliteDatabase.slow_query_log.<locals>._trace   s2    gB\!7SA "r#   )r   )logging	getLoggerre   r   SQLITE_TRACE_PROFILE)r   r   loggerr   r   rM   r   s    ` `  @r!   slow_query_logzCySqliteDatabase.slow_query_log   s>     ?*?@	B 	

6888Z
Pr#   c                     |d | _         n	||f| _         | j                         s-|dn| j                   } | j                         j                  |  |S r   )rN   r   r   rf   )r   r~   nrT   s       r!   rf   zCySqliteDatabase.progress   sN    :!DN !WDN~~ j7dnnD&DOO&&-	r#   c                 x    t         5  | j                         j                  |       d d d        y # 1 sw Y   y xY wr1   )r   r   begin)r   	lock_types     r!   r   zCySqliteDatabase.begin   s/    " 	/OO##I.	/ 	/ 	/s    09c                 v    t         5  | j                         j                          d d d        y # 1 sw Y   y xY wr1   )r   r   commitr3   s    r!   r   zCySqliteDatabase.commit   s-    " 	'OO$$&	' 	' 	'   /8c                 v    t         5  | j                         j                          d d d        y # 1 sw Y   y xY wr1   )r   r   rollbackr3   s    r!   r   zCySqliteDatabase.rollback   s-    " 	)OO&&(	) 	) 	)r   c                 >    | j                         j                         S r1   )r   
autocommitr3   s    r!   r   zCySqliteDatabase.autocommit   s     ++--r#   Fc                 H    | j                         j                  |||||      S r1   )r   	blob_open)r   tablecolumnrowid	read_onlydbnames         r!   r   zCySqliteDatabase.blob_open   s'     **5&%+13 	3r#   c                 ,   t        |t              r|j                         }nQt        |t        j                        r|}n4t        |t
        t        f      r| j                  t        |      ||||      S | j                         j                  ||||      S r1   )	r   rB   r   r   rY   r6   r   backup_to_filebackup)r   destinationpagesrq   rf   src_namer*   s          r!   r   zCySqliteDatabase.backup   s     k#34))+DX%8%89Dc4[1&&s;'7'/; ;  ''eT8XNNr#   c                 H    | j                         j                  |||||      S r1   )r   r   )r   filenamer   rq   rf   r   s         r!   r   zCySqliteDatabase.backup_to_file  s)     //%08(D 	Dr#   )T)NNN)   T)r   )deferred)FN)NNNN)Lr;   r<   r=   r   sqlite_version_infoserver_versionrG   r_   r\   rl   rs   rz   r   r   r   r   r   rh   r   r   r   rd   re   r   WARNINGr   rf   r   r   r   r%   r   r   r   r   r&   SQLITE_STATUS_MEMORY_USEDmemory_usedSQLITE_STATUS_MALLOC_SIZEmalloc_sizeSQLITE_STATUS_MALLOC_COUNTmalloc_countSQLITE_STATUS_PAGECACHE_USEDpagecache_used SQLITE_STATUS_PAGECACHE_OVERFLOWpagecache_overflowSQLITE_STATUS_PAGECACHE_SIZEpagecache_sizeSQLITE_STATUS_SCRATCH_USEDscratch_usedSQLITE_STATUS_SCRATCH_OVERFLOWscratch_overflowSQLITE_STATUS_SCRATCH_SIZEscratch_sizer,   SQLITE_DBSTATUS_LOOKASIDE_USEDlookaside_usedSQLITE_DBSTATUS_LOOKASIDE_HITlookaside_hit#SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZElookaside_miss#SQLITE_DBSTATUS_LOOKASIDE_MISS_FULLlookaside_miss_fullSQLITE_DBSTATUS_CACHE_USED
cache_usedSQLITE_DBSTATUS_SCHEMA_USEDschema_usedSQLITE_DBSTATUS_STMT_USEDstatement_usedSQLITE_DBSTATUS_CACHE_HIT	cache_hitSQLITE_DBSTATUS_CACHE_MISS
cache_missSQLITE_DBSTATUS_CACHE_WRITEcache_writer?   r@   s   @r!   rB   rB   B   sJ   11N5 
.$'";,FA AE'+
. +-T$__/') . .3 CGO HL $D X??@KX??FKhAABL E EFN#113 E EtLNhAABL!("I"IJhAA4HL "("I"IJN ..6M!44d<N&44d<++UD:J,,eT;K!**E49N**E49I++UD:J,,eT;Kr#   rB   c                       e Zd Zy)PooledCySqliteDatabaseN)r;   r<   r=   r2   r#   r!   r  r  (  s    r#   r  MATCH)F)FF)%r   pathlibr   r   r   r   r   r   r   playhouse.poolr	   playhouse.sqlite_extr
   r   r   r   r   r   r   r   r   r   r   r   playhouse.sqlite_udfr   r   ImportErrorexcr   r   r&   r,   r.   rB   r  r  r2   r#   r!   <module>r
     s       '  ! ( 0    &3
 
		8	$ BL Bc;~ c;L	24D 	 c  3
1
223s   B B,B''B,