
    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 n# e	$ r	 d dl
mZ Y nw xY w	 d dlZd dlmZ d dlmZ d dlmZ d dlmZ n# e	$ r	 dxZxZZY nw xY wd dlmZ d d	lmZ  e j        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(dS )    N)localEvent)Lock)Thread)Queue)Greenlet)__deprecated__)SqliteExtDatabasezpeewee.sqliteqc                       e Zd ZdS )ResultTimeoutN__name__
__module____qualname__     O/var/www/html/marketdash/venv/lib/python3.11/site-packages/playhouse/sqliteq.pyr   r              Dr   r   c                       e Zd ZdS )WriterPausedNr   r   r   r   r   r      r   r   r   c                       e Zd ZdS )ShutdownExceptionNr   r   r   r   r   r   "   r   r   r   c                       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dS )AsyncCursor)	sqlparamstimeout_event_cursor_exc_idx_rows_readyc                     || _         || _        || _        || _        d x| _        x| _        x| _        | _        d| _        d S NF)	r   r   r   r   r    r!   r"   r#   r$   )selfeventr   r   r   s        r   __init__zAsyncCursor.__init__*   sE    <@@@ty@49tzr   Nc                     || _         || _        d| _        ||                                ng | _        | j                                         | S )Nr   )r    r!   r"   fetchallr#   r   set)r'   cursorexcs      r   
set_resultzAsyncCursor.set_result2   sH    		*-+V__&&&2
r   c                     ||n| j         }| j                            |          s|rt          d          | j        | j        d| _        d S )N)r   zresults not ready, timed out.T)r   r   waitr   r!   r$   )r'   r   s     r   _waitzAsyncCursor._wait:   s_    $0''dl{00 	AW 	A ?@@@9 )Or   c                 X    | j         s|                                  | j        | j        | S N)r$   r2   r!   r'   s    r   __iter__zAsyncCursor.__iter__B   s-    { 	JJLLL9 )Or   c                     | j         s|                                  	 | 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   se    { 	JJLLL	*TY'C IINIIJ	  	  	  	 	 s   A Ac                 P    | j         s|                                  | j        j        S r4   )r$   r2   r    	lastrowidr5   s    r   r>   zAsyncCursor.lastrowidU   s$    { 	JJLLL|%%r   c                 P    | j         s|                                  | j        j        S r4   )r$   r2   r    rowcountr5   s    r   r@   zAsyncCursor.rowcount[   s$    { 	JJLLL|$$r   c                     | j         j        S r4   )r    descriptionr5   s    r   rB   zAsyncCursor.descriptiona   s    |''r   c                 8    | j                                          d S r4   )r    closer5   s    r   rD   zAsyncCursor.closee   s    r   c                      t          |           S r4   )listr5   s    r   r+   zAsyncCursor.fetchallh   s    Dzzr   c                 z    | j         s|                                  	 t          |           S # t          $ r Y d S w xY wr4   )r$   r2   r<   r:   r5   s    r   fetchonezAsyncCursor.fetchonek   sL    { 	JJLLL	:: 	 	 	44	s   , 
::r4   )r   r   r   	__slots__r)   r/   r2   r6   r<   __next__propertyr>   r@   rB   rD   r+   rH   r   r   r   r   r   &   s        II          	 	 	 H& & X&
 % % X%
 ( ( X(        r   r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )Writerdatabasequeuec                 "    || _         || _        d S r4   rN   )r'   rO   rP   s      r   r)   zWriter.__init__|   s     


r   c                    | j                                         }	 	 	 |.|                                 r| j                                         }n|                     |          }ng# t          $ rZ t
                              d           Y |:| j                             |           | j         j        	                                 d S d S w xY w# |9| j                             |           | j         j        	                                 w w xY w)NTz*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MM$$T***$**,,,,,  		 $$T***$**,,,,  s/   C AA# "C #$CC CC =Dc                    | j                                         \  }}|t          u r0t                              d           |                                 dS |t          u rt                      |t          u r0t          	                    d           |                                 d S |
                    d t                                 t                              d|           d S )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FFGGIII48^^#%%%5[[LLHIIIGGIIIIINN4000NN;SAAAAAr   c                 2   | j                                         \  }}|t          u r|                     |           n|t          u rht
                              d           | j                            |           | j        j	        
                                 |                                 d S |t          u r/t
                              d           |                                 n2|t          u rt                      t
                              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GGM  &&&M &&(((GGIIIF7]]LLKLLLGGIIII8^^#%%%LLA3GGGr   c                     t                               d|j                   	 | j                            |j        |j                  }d }n# t          $ r}d }|}Y d }~nd }~ww xY w|                    ||          S )Nzreceived query %s)rV   debugr   rO   _executer   	Exceptionr/   )r'   r;   r-   r.   execute_errs        r   rh   zWriter.execute   s    (#'222	]++CGSZ@@F
 CC	  	 	 	FCCCCCC	
 ~~fc***s   %A
 

A"AA"N)	r   r   r   rI   r)   r\   rT   rU   rh   r   r   r   rM   rM   y   sg        %I  - - -$B B 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.FTNc                    d|d<   t                      | _        |                     |                    dd                     }t	          t
          |           }	|	j        | _         |	j        |g|R d|i| || _	        || _
        d| _         |                     |          |          | _        |                                  | j	        r|                                  d S d S )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    &+"# ff --fjjD.I.IJJ
 *D11* 	CDCCC'CFCCC# / ?d22:>>~NN 	  """? 	JJLLLLL	 	r   c                 "    |rt           n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                       }|                    dd                                          dk    rt	          | j                  d|d<   |S )Njournal_modewalc              3   H   K   | ]\  }}|                                 |fV  d S r4   )lower).0kvs      r   	<genexpr>z=SqliteQueueDatabase._validate_journal_mode.<locals>.<genexpr>   s2      @@fq!AGGIIq>@@@@@@r   )
isinstancedictr^   r   
ValueErrorWAL_MODE_ERROR_MESSAGE)r'   rr   s     r   rt   z*SqliteQueueDatabase._validate_journal_mode   s     	+"E**'4(( 	A@@@@@@@G;;~u--3355>>T8999"'r   c                 B    | j                                         | _        d S r4   )r|   rP   _write_queuer5   s    r   r}   z'SqliteQueueDatabase._create_write_queue   s     /5577r   c                 4    | j                                         S r4   )r   qsizer5   s    r   
queue_sizezSqliteQueueDatabase.queue_size   s     &&(((r   c                 J   |t          d           |                                                    d          r|                     ||          S t	          | j                                        |||| j        n|          }| 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JJ99;;!!(++ 	.==f---%++---4_D))'	K K K
 	ufo...r   c                       j         5   j        s	 d d d            dS  fd} j                            |           _         j                                         d _        	 d d d            dS # 1 swxY w Y   d S )NFc                  Z    t          j                  } |                                  d S r4   )rM   r   r\   )writerr'   s    r   r\   z&SqliteQueueDatabase.start.<locals>.run  s&    d&788

r   T)rs   rz   r|   thread_writerr~   )r'   r\   s   ` r   r~   zSqliteQueueDatabase.start
  s    [ 
	 
	# 
	 
	 
	 
	 
	 
	 
	 
	      .55c::DLL   $D
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s   	A1AA11A58A5c                 t   t                               d           | j        5  | j        r	 d d d            dS | j                            t          d f           | j                                         | j        	                                s| j        
                                \  }}|t          k    s|t          k    r|                                 n-|t          k    r"|                    d t!                                 | j        	                                d| _        	 d d d            dS # 1 swxY w Y   d S )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33[ 	 	 	 	 	 	 	 	 	 	 !!8T"2333L '--// >+//11C;;"--GGIIII5[[NN4):)<)<=== '--// >  $D!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   	D-C(D--D14D1c                 R    | j         5  | j        cd d d            S # 1 swxY w Y   d S r4   )rs   rz   r5   s    r   
is_stoppedzSqliteQueueDatabase.is_stopped+  st    [ 	$ 	$#	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s     c                 
   | j         5  | j        r	 d d d            dS | j                                        }| j                            t          |f           d d d            n# 1 swxY w Y   |                                 d S r&   )rs   rz   r|   r(   r   r   ra   r1   r'   evts     r   pausezSqliteQueueDatabase.pause/  s    [ 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 %++--C!!5#,///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	




   	A$:A$$A(+A(c                 
   | j         5  | j        r	 d d d            dS | j                                        }| j                            t          |f           d d d            n# 1 swxY w Y   |                                 d S r&   )rs   rz   r|   r(   r   r   r_   r1   r   s     r   unpausezSqliteQueueDatabase.unpause9  s    [ 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 %++--C!!7C.111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	




r   c                 @    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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      s       * >B6:     @> > >
 
 
 
8 8 8) ) )       ($ $ $    M M M'66F6[99999r   ro   c                   .    e Zd ZdZddZd ZddZd ZdS )r   r   Nc                     || _         d S 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
    EGG^r   c                 <    ||n| j         }t          |pd          S Nr   )maxsize)r   r   r'   max_sizes     r   rP   zThreadHelper.queueP  s(    '3889LX]++++r   c                 8    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dS )r   r   c                     t                      S r4   )GEventr5   s    r   r(   zGreenletHelper.event]  s
    FHH_r   Nc                 <    ||n| j         }t          |pd          S r   )r   GQueuer   s     r   rP   zGreenletHelper.queue_  s(    '3889Lhm!,,,,r   c                 .    fd}t          |g|R i |S )Nc                  :    t          j                      | i |S r4   )geventsleep)ar   r   s     r   wrapz#GreenletHelper.thread.<locals>.wrapd  s     LNNN2q;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  sE        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     + + + + + +                     %MMM******,,,,,,444444,,,,,,, % % % $$G$fvvv% " ! ! ! ! ! 2 2 2 2 2 2 
	+	,	,	 	 	 	 	I 	 	 		 	 	 	 	9 	 	 		 	 	 	 		 	 	 	K K K K K& K K KZ 
&((D+ D+ D+ D+ D+V D+ D+ D+NE7 E7 E7 E7 E7+ E7 E7 E7P    6   $. . . . .\ . . . . .s   ) 77A A&%A&