
    h8'hC*                        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 	 d dlm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 d dlmZ d d	lmZ  e j0                  d
      Z G d de      Z G d de      Z G d de      Z G d de      Ze Z! e       Z" e       Z# e       Z$ G d de      Z% G d de      Z& G d de      Z' G d de'      Z(y# e	$ r	 d dl
mZ Y w xY w# e	$ r	 dxZxZZY w xY w)    N)localEvent)Lock)Thread)Queue)Greenlet)__deprecated__)SqliteExtDatabasezpeewee.sqliteqc                       e Zd Zy)ResultTimeoutN__name__
__module____qualname__     M/var/www/html/trade_iq/venv/lib/python3.12/site-packages/playhouse/sqliteq.pyr   r          r   r   c                       e Zd Zy)WriterPausedNr   r   r   r   r   r      r   r   r   c                       e Zd Zy)ShutdownExceptionNr   r   r   r   r   r   "   r   r   r   c                   x    e Zd ZdZd ZddZddZd Zd ZeZ	e
d        Ze
d	        Ze
d
        Zd Zd Zd Zy)AsyncCursor)	sqlparamstimeout_event_cursor_exc_idx_rows_readyc                     || _         || _        || _        || _        d x| _        x| _        x| _        | _        d| _        y NF)	r   r   r   r   r    r!   r"   r#   r$   )selfeventr   r   r   s        r   __init__zAsyncCursor.__init__*   sA    <@@@ty@49tzr   Nc                     || _         || _        d| _        ||j                         ng | _        | j
                  j                          | S )Nr   )r    r!   r"   fetchallr#   r   set)r'   cursorexcs      r   
set_resultzAsyncCursor.set_result2   s>    		*-+V__&2
r   c                     ||n| j                   }| j                  j                  |      s|rt        d      | j                  | j                  d| _        y )N)r   zresults not ready, timed out.T)r   r   waitr   r!   r$   )r'   r   s     r   _waitzAsyncCursor._wait:   sO    $0'dll{{0W ?@@99 ))Or   c                 n    | j                   s| j                          | j                  | j                  | S N)r$   r2   r!   r'   s    r   __iter__zAsyncCursor.__iter__B   s*    {{JJL99 ))Or   c                     | j                   s| j                          	 | j                  | j                     }| xj                  dz  c_        |S # t        $ r t
        w xY w)N   )r$   r2   r#   r"   
IndexErrorStopIteration)r'   objs     r   nextzAsyncCursor.nextI   sT    {{JJL	**TYY'C IINIJ	  	 	 s   A Ac                 f    | j                   s| j                          | j                  j                  S r4   )r$   r2   r    	lastrowidr5   s    r   r>   zAsyncCursor.lastrowidU   s"    {{JJL||%%%r   c                 f    | j                   s| j                          | j                  j                  S r4   )r$   r2   r    rowcountr5   s    r   r@   zAsyncCursor.rowcount[   s"    {{JJL||$$$r   c                 .    | j                   j                  S r4   )r    descriptionr5   s    r   rB   zAsyncCursor.descriptiona   s    ||'''r   c                 8    | j                   j                          y r4   )r    closer5   s    r   rD   zAsyncCursor.closee   s    r   c                     t        |       S r4   )listr5   s    r   r+   zAsyncCursor.fetchallh   s    Dzr   c                 p    | j                   s| j                          	 t        |       S # t        $ r Y y w xY wr4   )r$   r2   r<   r:   r5   s    r   fetchonezAsyncCursor.fetchonek   s3    {{JJL	: 		s   
) 	55r4   )r   r   r   	__slots__r)   r/   r2   r6   r<   __next__propertyr>   r@   rB   rD   r+   rH   r   r   r   r   r   &   ss    II	 H& &
 % %
 ( (r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)Writerdatabasequeuec                      || _         || _        y r4   rN   )r'   rO   rP   s      r   r)   zWriter.__init__|   s     
r   c                    | j                   j                         }	 	 	 |+| j                         r,| j                   j                         }n| j                  |      }@# t        $ rZ t
        j                  d       Y |@| j                   j                  |       | j                   j                  j                          y y w xY w# |@| j                   j                  |       | j                   j                  j                          w w xY w)Nz*writer received shutdown request, exiting.)
rO   
connectionwait_unpauseloopr   loggerinfo_close_statereset)r'   conns     r   runz
Writer.run   s    }}'')	-|,,.#'==#;#;#=D#yy  ) KK LM$$T*$$**,  	 $$T*$$**,  s/   C >A C C ;C ?C  C ADc                 z   | j                   j                         \  }}|t        u r&t        j	                  d       |j                          y|t        u r
t               |t        u r&t        j                  d       |j                          y |j                  d t                      t        j                  d|       y )Nz+writer unpaused - reconnecting to database.Tz-writer received pause, but is already paused.zwriter paused, not handling %s)rP   getUNPAUSErV   rW   r,   SHUTDOWNr   PAUSEerrorr/   r   warningr'   opr;   s      r   rT   zWriter.wait_unpause   s    **.."C=KKEFGGI8^#%%5[LLHIGGINN40NN;SAr   c                    | j                   j                         \  }}|t        u r| j                  |       |S |t        u ret
        j                  d       | j                  j                  |       | j                  j                  j                          |j                          y |t        u r't
        j                  d       |j                          |S |t        u r
t               t
        j                  d|       |S )Nz,writer paused - closing database connection.z0writer received unpause, but is already running.z&writer received unsupported object: %s)rP   r^   QUERYexecutera   rV   rW   rO   rX   rY   rZ   r,   r_   rb   r`   r   )r'   r[   re   r;   s       r   rU   zWriter.loop   s    **.."C;LL  5[KKFGMM  &MM  &&(GGI7]LLKLGGI
 	 8^#%%LLA3Gr   c                     t         j                  d|j                         	 | j                  j	                  |j                  |j
                        }d }|j                  ||      S # t        $ r}d }|}Y d }~$d }~ww xY w)Nzreceived query %s)rV   debugr   rO   _executer   	Exceptionr/   )r'   r;   r-   r.   execute_errs        r   rh   zWriter.execute   sl    (#''2	]]++CGGSZZ@F
 C~~fc**  	FC	s   0A& &	A=/A88A=N)	r   r   r   rI   r)   r\   rT   rU   rh   r   r   r   rM   rM   y   s!    %I-$B&	+r   rM   c                   z     e Zd ZdZ	 	 d fd	Zd ZddZd Zd ZddZ	d Z
d	 Zd
 Zd Zd Zd ZexZxZZ xZS )SqliteQueueDatabasezSQLite must be configured to use the WAL journal mode when using this feature. WAL mode allows one or more readers to continue reading while another connection writes to the database.c                    d|d<   t               | _        | j                  |j                  dd             }t	        t
        |       }	|	j                  | _         |	j                  |g|d|i| || _	        || _
        d| _         | j                  |      |      | _        | j                          | j                  r| j                          y y )NFcheck_same_threadpragmasT)r   _qlock_validate_journal_modepopsuperro   execute_sqlrk   r)   
_autostart_results_timeout_is_stoppedget_thread_impl_thread_helper_create_write_queuestart)r'   rO   
use_gevent	autostartqueue_max_sizeresults_timeoutargskwargsrr   Parent	__class__s             r   r)   zSqliteQueueDatabase.__init__   s    &+"# f --fjjD.IJ
 *D1** 	CDC'CFC# / ?d22:>~N 	  "??JJL r   c                     |rt         S t        S r4   )GreenletHelperThreadHelper)r'   r   s     r   r{   z#SqliteQueueDatabase.get_thread_impl   s    !+~==r   c                     |sddiS t        |t              st        d |D              }|j                  dd      j                         dk7  rt	        | j
                        d|d<   |S )Njournal_modewalc              3   F   K   | ]  \  }}|j                         |f  y wr4   )lower).0kvs      r   	<genexpr>z=SqliteQueueDatabase._validate_journal_mode.<locals>.<genexpr>   s     @fq!AGGIq>@s   !)
isinstancedictr^   r   
ValueErrorWAL_MODE_ERROR_MESSAGE)r'   rr   s     r   rt   z*SqliteQueueDatabase._validate_journal_mode   sf    "E**'4(@@@G;;~u-335>T8899"'r   c                 B    | j                   j                         | _        y r4   )r|   rP   _write_queuer5   s    r   r}   z'SqliteQueueDatabase._create_write_queue   s     //557r   c                 6    | j                   j                         S r4   )r   qsizer5   s    r   
queue_sizezSqliteQueueDatabase.queue_size   s      &&((r   c                 .   |t        d       |j                         j                  d      r| j                  ||      S t	        | j
                  j                         |||| j                  n|      }| j                  j                  t        |f       |S )Nz,"commit" has been deprecated and is a no-op.select)r(   r   r   r   )r
   r   
startswithrk   r   r|   r(   ry   r   putrg   )r'   r   r   commitr   r-   s         r   rw   zSqliteQueueDatabase.execute_sql   s    IJ99;!!(+==f--%%++--4_D))'	K
 	ufo.r   c                      j                   5   j                  s
	 d d d        y fd} j                  j                  |       _         j                  j                          d _        	 d d d        y# 1 sw Y   y xY w)NFc                  R    t        j                        } | j                          y r4   )rM   r   r\   )writerr'   s    r   r\   z&SqliteQueueDatabase.start.<locals>.run  s    d&7&78

r   T)rs   rz   r|   thread_writerr~   )r'   r\   s   ` r   r~   zSqliteQueueDatabase.start
  so    [[ 
	##
	 
	  ..55c:DLLL $D
	 
	 
	s   A5AA55A>c                 R   t         j                  d       | j                  5  | j                  r
	 d d d        y| j                  j                  t        d f       | j                  j                          | j                  j                         s~| j                  j                         \  }}|t        k(  s	|t        k(  r|j                          n#|t        k(  r|j                  d t!                      | j                  j                         s~d| _        	 d d d        y# 1 sw Y   y xY w)Nzenvironment stop requested.FT)rV   rj   rs   rz   r   r   r`   r   joinemptyr^   ra   r_   r,   rg   r/   r   rd   s      r   stopzSqliteQueueDatabase.stop  s    23[[ 		 	 !!8T"23LL ''--/++//1C;"-GGI5[NN4):)<= ''--/  $D!	 	 	s   DCDDD&c                 ^    | j                   5  | j                  cd d d        S # 1 sw Y   y xY wr4   )rs   rz   r5   s    r   
is_stoppedzSqliteQueueDatabase.is_stopped+  s'    [[ 	$##	$ 	$ 	$s   #,c                    | j                   5  | j                  r
	 d d d        y| j                  j                         }| j                  j                  t        |f       d d d        j                          y # 1 sw Y   xY wr&   )rs   rz   r|   r(   r   r   ra   r1   r'   evts     r   pausezSqliteQueueDatabase.pause/  sm    [[ 	0	0 	0 %%++-C!!5#,/	0 	
	0 	0   A8;A88Bc                    | j                   5  | j                  r
	 d d d        y| j                  j                         }| j                  j                  t        |f       d d d        j                          y # 1 sw Y   xY wr&   )rs   rz   r|   r(   r   r   r_   r1   r   s     r   unpausezSqliteQueueDatabase.unpause9  sm    [[ 	2	2 	2 %%++-C!!7C.1	2 	
	2 	2r   c                 0    t        dt        |       z        )Nz#This method is not supported by %r.)r   type)r'   r   r   s      r   __unsupported__z#SqliteQueueDatabase.__unsupported__C  s    >dKLLr   )FTNNr4   )NNN)r   r   r   r   r)   r{   rt   r}   r   rw   r~   r   r   r   r   r   atomictransaction	savepoint__classcell__)r   s   @r   ro   ro      sa    * >B6:@>
8)($M'66F6[9r   ro   c                   ,    e Zd ZdZddZd ZddZd Zy)r   r   Nc                     || _         y r4   r   )r'   r   s     r   r)   zThreadHelper.__init__K  s
    ,r   c                     t               S r4   r   r5   s    r   r(   zThreadHelper.eventN  s    EG^r   c                 B    ||n| j                   }t        |xs d      S Nr   )maxsize)r   r   r'   max_sizes     r   rP   zThreadHelper.queueP  s#    '389L9LX]++r   c                 0    t        |||      }d|_        |S )N)targetr   r   T)r   daemon)r'   fnr   r   r   s        r   r   zThreadHelper.threadT  s    rV<r   r4   )r   r   r   rI   r)   r(   rP   r   r   r   r   r   r   H  s    #I- $,r   r   c                   $    e Zd ZdZd ZddZd Zy)r   r   c                     t               S r4   )GEventr5   s    r   r(   zGreenletHelper.event]  s    FH_r   Nc                 B    ||n| j                   }t        |xs d      S r   )r   GQueuer   s     r   rP   zGreenletHelper.queue_  s#    '389L9Lhm!,,r   c                 ,    fd}t        |g|i |S )Nc                  <    t        j                           | i |S r4   )geventsleep)ar   r   s     r   wrapz#GreenletHelper.thread.<locals>.wrapd  s    LLNq;A;r   )GThread)r'   r   r   r   r   s    `   r   r   zGreenletHelper.threadc  s    	 t-d-f--r   r4   )r   r   r   rI   r(   rP   r   r   r   r   r   r   Z  s    I$-.r   r   ))loggingweakref	threadingr   thread_localr   r   r   r   ImportErrorrP   r   r	   r   gevent.eventr   gevent.localgreenlet_localgevent.queuer   peeweer
   playhouse.sqlite_extr   	getLoggerrV   rl   r   r   r   objectr   r:   r`   rg   ra   r_   rM   ro   r   r   r   r   r   <module>r      s
     +   %*,4, " 2 
		+	,	I 		9 			 	K& KZ 
(D+V D+NE7+ E7P6 $.\ .c
    % $$G$fv%s"   C C$ C! C!$C21C2