
    ViC*                        S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJr   S SKJr   S SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  \ R0                  " S
5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\ r!\" 5       r"\" 5       r#\" 5       r$ " S S\5      r% " S S\5      r& " S S\5      r' " S S\'5      r(g! \	 a	    S SK
Jr   Nf = f! \	 a	    S=r=rr Nf = f)    N)localEvent)Lock)Thread)Queue)Greenlet)__deprecated__)SqliteExtDatabasezpeewee.sqliteqc                       \ rS rSrSrg)ResultTimeout    N__name__
__module____qualname____firstlineno____static_attributes__r       d/home/james-whalen/.local/share/pipx/venvs/semgrep/lib/python3.13/site-packages/playhouse/sqliteq.pyr   r          r   r   c                       \ rS rSrSrg)WriterPaused   r   Nr   r   r   r   r   r      r   r   r   c                       \ rS rSrSrg)ShutdownException"   r   Nr   r   r   r   r   r   "   r   r   r   c                       \ rS rSrSrS rSS jrSS jrS rS r	\	r
\S	 5       r\S
 5       r\S 5       rS rS rS rSrg)AsyncCursor&   )	sqlparamstimeout_event_cursor_exc_idx_rows_readyc                 z    Xl         X l        X0l        X@l        S =U l        =U l        =U l        U l        SU l        g NF)	r%   r"   r#   r$   r&   r'   r(   r)   r*   )selfeventr"   r#   r$   s        r   __init__AsyncCursor.__init__*   s9    <@@@ty@49tzr   Nc                     Xl         X l        SU l        Uc  UR                  5       O/ U l        U R
                  R                  5         U $ )Nr   )r&   r'   r(   fetchallr)   r%   set)r-   cursorexcs      r   
set_resultAsyncCursor.set_result2   s:    		*-+V__&2
r   c                     Ub  UOU R                   nU R                  R                  US9(       d  U(       a  [        S5      eU R                  b  U R                  eSU l        g )N)r$   zresults not ready, timed out.T)r$   r%   waitr   r'   r*   )r-   r$   s     r   _waitAsyncCursor._wait:   sO    $0'dll{{0W ?@@99 ))Or   c                 z    U R                   (       d  U R                  5         U R                  b  U R                  eU $ N)r*   r:   r'   r-   s    r   __iter__AsyncCursor.__iter__B   s*    {{JJL99 ))Or   c                     U R                   (       d  U R                  5          U R                  U R                     nU =R                  S-  sl        U$ ! [         a    [
        ef = f)N   )r*   r:   r)   r(   
IndexErrorStopIteration)r-   objs     r   nextAsyncCursor.nextI   sT    {{JJL	**TYY'C IINIJ	  	 	 s   A A$c                 p    U R                   (       d  U R                  5         U R                  R                  $ r=   )r*   r:   r&   	lastrowidr>   s    r   rI   AsyncCursor.lastrowidU   s"    {{JJL||%%%r   c                 p    U R                   (       d  U R                  5         U R                  R                  $ r=   )r*   r:   r&   rowcountr>   s    r   rL   AsyncCursor.rowcount[   s"    {{JJL||$$$r   c                 .    U R                   R                  $ r=   )r&   descriptionr>   s    r   rO   AsyncCursor.descriptiona   s    ||'''r   c                 8    U R                   R                  5         g r=   )r&   closer>   s    r   rR   AsyncCursor.closee   s    r   c                     [        U 5      $ r=   )listr>   s    r   r2   AsyncCursor.fetchallh   s    Dzr   c                 |    U R                   (       d  U R                  5          [        U 5      $ ! [         a     g f = fr=   )r*   r:   rF   rD   r>   s    r   fetchoneAsyncCursor.fetchonek   s3    {{JJL	: 		s   
. 
;;)	r&   r%   r'   r(   r*   r)   r#   r"   r$   r=   )r   r   r   r   	__slots__r/   r6   r:   r?   rF   __next__propertyrI   rL   rO   rR   r2   rX   r   r   r   r   r    r    &   ss    II	 H& &
 % %
 ( (r   r    c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g)	Writery   databasequeuec                     Xl         X l        g r=   r`   )r-   ra   rb   s      r   r/   Writer.__init__|   s     
r   c                 *   U R                   R                  5       n   Uc0  U R                  5       (       a  U R                   R                  5       nOU R                  U5      n MH  ! [         a[    [
        R                  S5         Ub@  U R                   R                  U5        U R                   R                  R                  5         g g f = f! Ub@  U R                   R                  U5        U R                   R                  R                  5         f f = f)Nz*writer received shutdown request, exiting.)
ra   
connectionwait_unpauseloopr   loggerinfo_close_statereset)r-   conns     r   run
Writer.run   s    }}'')	-|,,..#'==#;#;#=D#yy  ) KK LM$$T*$$**,  	 $$T*$$**,  s;   C 2A% C A% "C %C
C 	C

C ADc                 ~   U R                   R                  5       u  pU[        L a&  [        R	                  S5        UR                  5         gU[        L a
  [        5       eU[        L a&  [        R                  S5        UR                  5         g UR                  S [        5       5        [        R                  SU5        g )Nz+writer unpaused - reconnecting to database.Tz-writer received pause, but is already paused.zwriter paused, not handling %s)rb   getUNPAUSEri   rj   r3   SHUTDOWNr   PAUSEerrorr6   r   warningr-   oprE   s      r   rg   Writer.wait_unpause   s    **.."=KKEFGGI8^#%%5[LLHIGGINN40NN;SAr   c                    U R                   R                  5       u  p#U[        L a  U R                  U5        U$ U[        L ae  [
        R                  S5        U R                  R                  U5        U R                  R                  R                  5         UR                  5         g U[        L a'  [
        R                  S5        UR                  5         U$ U[        L a
  [        5       e[
        R                  SU5        U$ )Nz,writer paused - closing database connection.z0writer received unpause, but is already running.z&writer received unsupported object: %s)rb   rr   QUERYexecuteru   ri   rj   ra   rk   rl   rm   r3   rs   rv   rt   r   )r-   rn   ry   rE   s       r   rh   Writer.loop   s    **..";LL  5[KKFGMM  &MM  &&(GGI7]LLKLGGI
 	 8^#%%LLA3Gr   c                     [         R                  SUR                  5         U R                  R	                  UR                  UR
                  5      nS nUR                  X#5      $ ! [         a  nS nUn S nAN$S nAff = f)Nzreceived query %s)ri   debugr"   ra   _executer#   	Exceptionr6   )r-   rE   r4   r5   execute_errs        r   r}   Writer.execute   sj    (#''2	]]++CGGSZZ@F
 C~~f**  	FC	s   0A% %
A=/A88A=N)r   r   r   r   rZ   r/   ro   rg   rh   r}   r   r   r   r   r^   r^   y   s!    %I-$B&	+r   r^   c                      ^  \ rS rSrSr  SU 4S jjrS rSS jrS rS r	SS jr
S	 rS
 rS rS rS rS r\=r=rrSrU =r$ )SqliteQueueDatabase   zSQLite 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                   > SUS'   [        5       U l        U R                  UR                  SS 5      5      n[	        [
        U 5      n	U	R                  U l        U	R                  " U/UQ7SU0UD6  X0l	        XPl
        SU l        U R                  U5      " U5      U l        U R                  5         U R                  (       a  U R                  5         g g )NFcheck_same_threadpragmasT)r   _qlock_validate_journal_modepopsuperr   execute_sqlr   r/   
_autostart_results_timeout_is_stoppedget_thread_impl_thread_helper_create_write_queuestart)r-   ra   
use_gevent	autostartqueue_max_sizeresults_timeoutargskwargsr   Parent	__class__s             r   r/   SqliteQueueDatabase.__init__   s    &+"# f --fjjD.IJ
 *D1** 	CDC'CFC# / #22:>~N 	  "??JJL r   c                 (    U(       a  [         $ [        $ r=   )GreenletHelperThreadHelper)r-   r   s     r   r   #SqliteQueueDatabase.get_thread_impl   s    !+~==r   c                     U(       d  SS0$ [        U[        5      (       d  [        S U 5       5      nUR                  SS5      R                  5       S:w  a  [	        U R
                  5      eSUS'   U$ )Njournal_modewalc              3   J   #    U  H  u  pUR                  5       U4v   M     g 7fr=   )lower).0kvs      r   	<genexpr>=SqliteQueueDatabase._validate_journal_mode.<locals>.<genexpr>   s     @fqAGGIq>s   !#)
isinstancedictrr   r   
ValueErrorWAL_MODE_ERROR_MESSAGE)r-   r   s     r   r   *SqliteQueueDatabase._validate_journal_mode   si    "E**'4((@@@G;;~u-335>T8899"'r   c                 B    U R                   R                  5       U l        g r=   )r   rb   _write_queuer>   s    r   r   'SqliteQueueDatabase._create_write_queue   s     //557r   c                 6    U R                   R                  5       $ r=   )r   qsizer>   s    r   
queue_sizeSqliteQueueDatabase.queue_size   s      &&((r   c                 4   Ub  [        S5        UR                  5       R                  S5      (       a  U R                  X5      $ [	        U R
                  R                  5       UUUc  U R                  OUS9nU R                  R                  [        U45        U$ )Nz,"commit" has been deprecated and is a no-op.select)r.   r"   r#   r$   )r
   r   
startswithr   r    r   r.   r   r   putr|   )r-   r"   r#   commitr$   r4   s         r   r   SqliteQueueDatabase.execute_sql   s    IJ99;!!(++==--%%++--4_D))'	K
 	ufo.r   c                   ^  T R                      T R                  (       d
   S S S 5        gU 4S jnT R                  R                  U5      T l        T R                  R                  5         ST l         S S S 5        g! , (       d  f       g = f)NFc                  R   > [        TTR                  5      n U R                  5         g r=   )r^   r   ro   )writerr-   s    r   ro   &SqliteQueueDatabase.start.<locals>.run  s    d&7&78

r   T)r   r   r   thread_writerr   )r-   ro   s   ` r   r   SqliteQueueDatabase.start
  sa    [[## [  ..55c:DLLL $D [[s   A;AA;;
B	c                    [         R                  S5        U R                     U R                  (       a
   S S S 5        gU R                  R                  [        S 45        U R                  R                  5         U R                  R                  5       (       d  U R                  R                  5       u  pU[        :X  d
  U[        :X  a  UR                  5         O$U[        :X  a  UR                  S [!        5       5        U R                  R                  5       (       d  M  SU l         S S S 5        g! , (       d  f       g = f)Nzenvironment stop requested.FT)ri   r   r   r   r   r   rt   r   joinemptyrr   ru   rs   r3   r|   r6   r   rx   s      r   stopSqliteQueueDatabase.stop  s    23[[ [ !!8T"23LL ''--//++//1;"-GGI5[NN4):)<= ''--//  $D! [[s   D/CD/D//
D=c                 h    U R                      U R                  sS S S 5        $ ! , (       d  f       g = fr=   )r   r   r>   s    r   
is_stoppedSqliteQueueDatabase.is_stopped+  s    [[## [[s   #
1c                    U R                      U R                  (       a
   S S S 5        gU R                  R                  5       nU R                  R                  [        U45        S S S 5        WR                  5         g ! , (       d  f       N= fr,   )r   r   r   r.   r   r   ru   r9   r-   evts     r   pauseSqliteQueueDatabase.pause/  sb    [[ [ %%++-C!!5#,/  	
 [   A=;A==
Bc                    U R                      U R                  (       a
   S S S 5        gU R                  R                  5       nU R                  R                  [        U45        S S S 5        WR                  5         g ! , (       d  f       N= fr,   )r   r   r   r.   r   r   rs   r9   r   s     r   unpauseSqliteQueueDatabase.unpause9  sb    [[ [ %%++-C!!7C.1  	
 [r   c                 0    [        S[        U 5      -  5      e)Nz#This method is not supported by %r.)r   type)r-   r   r   s      r   __unsupported__#SqliteQueueDatabase.__unsupported__C  s    >dKLLr   )r   r   r   r   r   r   r   r   )FTNNr=   )NNN)r   r   r   r   r   r/   r   r   r   r   r   r   r   r   r   r   r   atomictransaction	savepointr   __classcell__)r   s   @r   r   r      sa    * >B6:@>
8)($M'66F6[9r   r   c                   8    \ rS rSrSrSS jrS rSS jrS rSr	g)	r   iH  r   Nc                     Xl         g r=   r   )r-   r   s     r   r/   ThreadHelper.__init__K  s    ,r   c                     [        5       $ r=   r   r>   s    r   r.   ThreadHelper.eventN  s    EG^r   c                 H    Ub  UOU R                   n[        U=(       d    SS9$ Nr   )maxsize)r   r   r-   max_sizes     r   rb   ThreadHelper.queueP  s#    '389L9LX]++r   c                 (    [        XUS9nSUl        U$ )N)targetr   r   T)r   daemon)r-   fnr   r   r   s        r   r   ThreadHelper.threadT  s    rV<r   r=   )
r   r   r   r   rZ   r/   r.   rb   r   r   r   r   r   r   r   H  s    #I- $,r   r   c                   .    \ rS rSrSrS rSS jrS rSrg)r   iZ  r   c                     [        5       $ r=   )GEventr>   s    r   r.   GreenletHelper.event]  s    FH_r   Nc                 H    Ub  UOU R                   n[        U=(       d    SS9$ r   )r   GQueuer   s     r   rb   GreenletHelper.queue_  s#    '389L9Lhm!,,r   c                 .   ^ U4S jn[        U/UQ70 UD6$ )Nc                  >   > [         R                  " 5         T" U 0 UD6$ r=   )geventsleep)ar   r   s     r   wrap#GreenletHelper.thread.<locals>.wrapd  s    LLNq;A;r   )GThread)r-   r   r   r   r   s    `   r   r   GreenletHelper.threadc  s    	 t-d-f--r   r=   )	r   r   r   r   rZ   r.   rb   r   r   r   r   r   r   r   Z  s    I$-.r   r   ))loggingweakref	threadingr   thread_localr   r   r   r   ImportErrorrb   r   r	   r   gevent.eventr   gevent.localgreenlet_localgevent.queuer   peeweer
   playhouse.sqlite_extr   	getLoggerri   r   r   r   r   objectr    rD   rt   r|   ru   rs   r^   r   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"%C43C4