
    !j)                        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 n# e$ r	 dxZxZZY nw xY w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)Queue)localEvent)Lock)Thread)Greenlet)SqliteDatabasezpeewee.sqliteqc                       e Zd ZdS )ResultTimeoutN__name__
__module____qualname__     M/var/www/html/bolsaweb/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_result.   sH    		*-+V__&&&2
r   c                     ||n| j         }| j                            |          s|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._wait6   s\    $0''dl{00 	AW5H ?@@@9 )Or   c                 X    | j         s|                                  | j        | j        | S N)r#   r1   r    r&   s    r   __iter__zAsyncCursor.__iter__>   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#   r1   r"   r!   
IndexErrorStopIteration)r&   objs     r   nextzAsyncCursor.nextE   se    { 	JJLLL	*TY'C IINIIJ	  	  	  	 	 s   A Ac                 P    | j         s|                                  | j        j        S r3   )r#   r1   r   	lastrowidr4   s    r   r=   zAsyncCursor.lastrowidQ   s$    { 	JJLLL|%%r   c                 P    | j         s|                                  | j        j        S r3   )r#   r1   r   rowcountr4   s    r   r?   zAsyncCursor.rowcountW   s$    { 	JJLLL|$$r   c                 P    | j         s|                                  | j        j        S r3   )r#   r1   r   descriptionr4   s    r   rA   zAsyncCursor.description]   s$    { 	JJLLL|''r   c                 X    | j         "| j                                          d | _         d S d S r3   )r   closer4   s    r   rC   zAsyncCursor.closec   s1    <#L   DLLL $#r   c                      t          |           S r3   )listr4   s    r   r*   zAsyncCursor.fetchallh   s    Dzzr   c                 z    | j         s|                                  	 t          |           S # t          $ r Y d S w xY wr3   )r#   r1   r;   r9   r4   s    r   fetchonezAsyncCursor.fetchonek   sL    { 	JJLLL	:: 	 	 	44	s   , 
::r3   )r   r   r   	__slots__r(   r.   r1   r5   r;   __next__propertyr=   r?   rA   rC   r*   rG   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 r3   rM   )r&   rN   rO   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.)
rN   
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)rO   getUNPAUSErU   rV   r+   SHUTDOWNr   PAUSEerrorr.   r   warning)r&   opr:   s      r   rS   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)rO   r]   QUERYexecuter`   rU   rV   rN   rW   rX   rY   r+   r^   ra   r_   r   )r&   rZ   rc   r:   s       r   rT   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)rU   debugr   rN   _executer   	Exceptionr.   )r&   r:   r,   r-   execute_errs        r   rf   zWriter.execute   s    (#'222	]++CGSZ@@F
 CC	  	 	 	FCCCCCC	
 ~~fc***s   %A
 

A"AA"N)	r   r   r   rH   r(   r[   rS   rT   rf   r   r   r   rL   rL   y   sg        %I  - - -$B B B  &	+ 	+ 	+ 	+ 	+r   rL   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superrm   execute_sqlri   r(   
_autostart_results_timeout_is_stoppedget_thread_impl_thread_helper_create_write_queuestart)r&   rN   
use_gevent	autostartqueue_max_sizeresults_timeoutargskwargsrp   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 r3   )GreenletHelperThreadHelper)r&   r}   s     r   ry   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 r3   )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&   rp   s     r   rr   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 r3   )rz   rO   _write_queuer4   s    r   r{   z'SqliteQueueDatabase._create_write_queue   s     /5577r   c                 4    | j                                         S r3   )r   qsizer4   s    r   
queue_sizezSqliteQueueDatabase.queue_size   s     &&(((r   c                 (   |                                                     d          r|                     ||          S t          | j                                        |||| j        n|          }| j                            t          |f           |S )Nselect)r'   r   r   r   )
r   
startswithri   r   rz   r'   rw   r   putre   )r&   r   r   r   r,   s        r   ru   zSqliteQueueDatabase.execute_sql   s    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 r3   )rL   r   r[   )writerr&   s    r   r[   z&SqliteQueueDatabase.start.<locals>.run  s&    d&788

r   T)rq   rx   rz   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                               d           | j        5  | j        r	 d d d            dS | j                            t          d f           | j        }d| _        d d d            n# 1 swxY w Y   |                                 | j        	                                sp| j        
                                \  }}|t          u s	|t          u r|                                 n+|t          u r"|                    d t!                                 dS d S )Nzenvironment stop requested.FT)rU   rh   rq   rx   r   r   r_   r   joinemptyr]   r`   r^   r+   re   r.   r   )r&   r   rc   r:   s       r   stopzSqliteQueueDatabase.stop  sh   2333[ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ !!8T"2333\F#D	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	 #))++ 	'++--GBU{{bGmm				ut%6%8%89994	 	s   	A3/A33A7:A7c                 R    | j         5  | j        cd d d            S # 1 swxY w Y   d S r3   )rq   rx   r4   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%   )rq   rx   rz   r'   r   r   r`   r0   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%   )rq   rx   rz   r'   r   r   r^   r0   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   )FTNNr3   )NN)r   r   r   r   r(   ry   rr   r{   r   ru   r|   r   r   r   r   r   atomictransaction	savepoint__classcell__)r   s   @r   rm   rm      s       * >B6:     @> > >
 
 
 
8 8 8) ) )
 
 
 
    ,$ $ $    M M M'66F6[99999r   rm   c                   .    e Zd ZdZddZd ZddZd ZdS )r   r   Nc                     || _         d S r3   r   )r&   r   s     r   r(   zThreadHelper.__init__K  s    ,r   c                     t                      S r3   r   r4   s    r   r'   zThreadHelper.eventN  s
    EGG^r   c                 <    ||n| j         }t          |pd          S Nr   )maxsize)r   r   r&   max_sizes     r   rO   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   r3   )r   r   r   rH   r(   r'   rO   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 r3   )GEventr4   s    r   r'   zGreenletHelper.event]  s
    FHH_r   Nc                 <    ||n| j         }t          |pd          S r   )r   GQueuer   s     r   rO   zGreenletHelper.queue_  s(    '3889Lhm!,,,,r   c                 .    fd}t          |g|R i |S )Nc                  :    t          j                      | i |S r3   )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   r3   )r   r   r   rH   r'   rO   r   r   r   r   r   r   Z  sE        I$$$- - - -. . . . .r   r   )'loggingweakrefrO   r   	threadingr   thread_localr   r   r   r   r	   r   gevent.eventr   gevent.localgreenlet_localgevent.queuer   ImportErrorpeeweer
   	getLoggerrU   rj   r   r   r   objectr   r9   r_   re   r`   r^   rL   rm   r   r   r   r   r   <module>r      s           + + + + + +                  %MMM******,,,,,,444444,,,,,,, % % % $$G$fvvv% " ! ! ! ! ! 
	+	,	,	 	 	 	 	I 	 	 		 	 	 	 	9 	 	 		 	 	 	 		 	 	 	O O O O O& O O Ob 
&((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   A AA