
    LBe-$                     
   d dl Z d dlZd dlZ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mZ  G d de      Z G d d	e
      Z G d d      Z G d de      Z G d d      Z G d d      Z G d d      Z G d de      Zy)    N)abstractmethod)deque)suppress)AnyOptionalc                       e Zd ZdZd Zd Zy)_BaseQueueMetazJ
    Metaclass to check queue classes against the necessary interface
    c                 6    | j                  t        |            S N)__subclasscheck__type)clsinstances     .lib/python3.12/site-packages/queuelib/queue.py__instancecheck__z _BaseQueueMeta.__instancecheck__   s    $$T(^44    c                 p   t        |d      xr t        |j                        xr t        |d      xr t        |j                        xrm t        |d      xr_ t        |j                        xrH t        |d      xr: t        |j
                        xr# t        |d      xr t        |j                        S )Npushpoppeekclose__len__)hasattrcallabler   r   r   r   r   )r   subclasss     r   r   z _BaseQueueMeta.__subclasscheck__   s    Hf% 	+'	+%(	+ &	+ &)		+
 '	+ '*	+ (	+ ),	+ ))*	
r   N)__name__
__module____qualname____doc__r   r    r   r   r	   r	      s    5
r   r	   c                   v    e Zd Zededdfd       Zedee   fd       Zedee   fd       Zed        Z	d	dZ
y)
	BaseQueueobjreturnNc                     t               r   NotImplementedErrorselfr#   s     r   r   zBaseQueue.push$       !##r   c                     t               r   r&   r)   s    r   r   zBaseQueue.pop(   r*   r   c                     t               r   r&   r,   s    r   r   zBaseQueue.peek,   r*   r   c                     t               r   r&   r,   s    r   r   zBaseQueue.__len__0   r*   r   c                      y r   r    r,   s    r   r   zBaseQueue.close4       r   r$   N)r   r   r   r   r   r   r   r   r   r   r   r    r   r   r"   r"   #   sy    $ $ $ $ $Xc] $ $ $hsm $ $ $ $r   r"   )	metaclassc                   Z    e Zd ZdZddZdeddfdZdee   fdZdee   fdZ	dd	Z
d
 Zy)FifoMemoryQueuez7In-memory FIFO queue, API compliant with FifoDiskQueue.r$   Nc                 "    t               | _        y r   )r   qr,   s    r   __init__zFifoMemoryQueue.__init__;   s    r   r#   c                 :    | j                   j                  |       y r   )r6   appendr(   s     r   r   zFifoMemoryQueue.push>   s    cr   c                 R    | j                   r| j                   j                         S d S r   )r6   popleftr,   s    r   r   zFifoMemoryQueue.popA   s    #'66tvv~~3t3r   c                 <    | j                   r| j                   d   S d S Nr   r6   r,   s    r   r   zFifoMemoryQueue.peekD   s     FFtvvay,,r   c                      y r   r    r,   s    r   r   zFifoMemoryQueue.closeG   r0   r   c                 ,    t        | j                        S r   )lenr6   r,   s    r   r   zFifoMemoryQueue.__len__J   s    466{r   r1   )r   r   r   r   r7   r   r   r   r   r   r   r   r    r   r   r4   r4   8   sG    A  4Xc] 4-hsm -r   r4   c                   4    e Zd ZdZdee   fdZdee   fdZy)LifoMemoryQueuez7In-memory LIFO queue, API compliant with LifoDiskQueue.r$   c                 R    | j                   r| j                   j                         S d S r   )r6   r   r,   s    r   r   zLifoMemoryQueue.popQ   s    #vvtvvzz|/4/r   c                 <    | j                   r| j                   d   S d S )Nr>   r,   s    r   r   zLifoMemoryQueue.peekT   s    !VVtvvbz--r   N)r   r   r   r   r   r   r   r   r    r   r   rC   rC   N   s%    A0Xc] 0.hsm .r   rC   c                       e Zd ZdZdZ ej                  e      Zddede	ddfdZ
deddfd	Zdd
e	defdZdee   fdZdee   fdZddZde	fdZde	defdZdeddfdZdefdZddZy)FifoDiskQueuezPersistent FIFO queue.>Lpath	chunksizer$   Nc                    || _         t        j                   j                  |      st        j                  |       | j	                  |      | _        | j
                  d   | _        | j                  | j
                  d   d   d      | _        | j                  | j
                  d   d         | _	        t        j                  | j                  j                         | j
                  d   d   t        j                         y )NrK   headr   ab+tail   )rJ   osexistsmakedirs	_loadinfoinforK   
_openchunkheadftailflseekfilenoSEEK_SET)r)   rJ   rK   s      r   r7   zFifoDiskQueue.__init__^   s    	ww~~d#KKNN9-	;/__TYYv%6q%95A
__TYYv%6q%9:

""$dii&7&:BKKHr   stringc                 >   t        |t              s-t        dj                  t	        |      j
                              | j                  d   \  }}|dz  }t        j                  | j                  t        |            }t        j                  | j                  j                         ||z          || j                  k(  r8d}|dz  }| j                  j!                          | j#                  |d      | _        | j                  dxx   dz  cc<   ||g| j                  d<   y )NUnsupported type: {}rM      r   rN   size)
isinstancebytes	TypeErrorformatr   r   rU   structpackszhdr_formatrA   rQ   writerW   rZ   rK   r   rV   )r)   r\   hnumhposszhdrs        r   r   zFifoDiskQueue.pushh   s    &%(299$v,:O:OPQQYYv&
d	D--s6{;
""$efn54>>!DAIDJJu5DJ		&Q!4L		&r   numbermodec                 p    t        t        j                  j                  | j                  d|z        |      S )Nzq%05d)openrQ   rJ   join)r)   rl   rm   s      r   rV   zFifoDiskQueue._openchunkw   s'    BGGLLGf,<=tDDr   c                    | j                   d   \  }}}||g| j                   d   k\  ry | j                  j                         }t        j                  || j
                        }|sy t        j                  | j                  |      \  }t        j                  ||      }|dz  }|| j
                  |z   z  }|| j                  k(  rw|| j                   d   d   k  rbdx}}|dz  }| j                  j                          t        j                  | j                  j                         | j                  |      | _        | j                   dxx   dz  cc<   |||g| j                   d<   |S )NrO   rM   r_   r   r`   )rU   rX   rZ   rQ   read
szhdr_sizere   unpackrg   rK   r   removenamerV   )r)   tnumtcnttoffsettfdrk   r`   datas           r   r   zFifoDiskQueue.popz   s5   "ii/dG$<499V,,jj!T__--- 1 159wwsD!	4??T))4>>!ddii.?.B&BD7AIDJJIIdjjoo&.DJ		&Q!41		&r   c                    | j                   d   \  }}}||g| j                   d   k\  ry | j                  j                         }t        j                  |dt        j
                        }t        j                  || j                        }|sy t        j                  | j                  |      \  }t        j                  ||      }t        j                  ||t        j                         |S )NrO   rM   r   )rU   rX   rZ   rQ   rY   SEEK_CURrr   rs   re   rt   rg   r[   )	r)   rw   rx   _rz   tfd_initial_posrk   r`   r{   s	            r   r   zFifoDiskQueue.peek   s    		&)dA$<499V,,jj!((32;;7T__--- 1 159wwsD!
or{{3r   c                     | j                   j                          | j                  j                          | j                  | j                         t        |       dk(  r| j                          y y r=   )rW   r   rX   	_saveinforU   rA   _cleanupr,   s    r   r   zFifoDiskQueue.close   sK    



tyy!t9>MMO r   c                      | j                   d   S )Nr`   )rU   r,   s    r   r   zFifoDiskQueue.__len__   s    yy  r   c                     | j                         }t        j                  j                  |      r+t	        |      5 }t        j                  |      }d d d        |S |dg dddgd}|S # 1 sw Y   S xY w)Nr   )r   r   r   )rK   r`   rO   rM   )	_infopathrQ   rJ   rR   ro   jsonload)r)   rK   infopathfrU   s        r   rT   zFifoDiskQueue._loadinfo   sr    >>#77>>(#h $1yy|$  '!A	D $ s   A((A2rU   c                     t        | j                         d      5 }t        j                  ||       d d d        y # 1 sw Y   y xY w)Nw)ro   r   r   dump)r)   rU   r   s      r   r   zFifoDiskQueue._saveinfo   s8    $.."C( 	AIIdA	 	 	s	   ;Ac                 V    t         j                  j                  | j                  d      S )N	info.json)rQ   rJ   rp   r,   s    r   r   zFifoDiskQueue._infopath   s    ww||DII{33r   c                    t        j                   t        j                  j                  | j                  d            D ]  }t        j                  |        t        j                  t        j                  j                  | j                  d             t        t              5  t        j                  | j                         d d d        y # 1 sw Y   y xY w)Nzq*r   )globrQ   rJ   rp   ru   r   OSErrorrmdir)r)   xs     r   r   zFifoDiskQueue._cleanup   s    277<<		489 	AIIaL	
		"'',,tyy+67g 	 HHTYY	  	  	 s   $ CC)i )rbr1   )r   r   r   r   rg   re   calcsizers   strintr7   rb   r   rV   r   r   r   r   r   dictrT   r   r   r   r    r   r   rH   rH   X   s     L .JIS IS Id I)5 )T )E EC EXe_ ,huo ! !3 4 d t 43 4 r   rH   c                       e Zd ZdZdZ ej                  e      ZdeddfdZ	de
ddfdZdee
   fd	Zdee
   fd
ZddZdefdZy)LifoDiskQueuezPersistent LIFO queue.rI   rJ   r$   Nc                    || _         t        j                   j                  |      rt        |d      | _        | j                  j                  | j                        }t        j                  | j                  |      \  | _
        | j                  j                  dt        j                         y t        |d      | _        | j                  j                  t        j                  | j                  d             d| _
        y )Nzrb+r   zwb+)rJ   rQ   rR   ro   r   rr   	SIZE_SIZEre   rt   SIZE_FORMATr`   seekSEEK_ENDrh   rf   )r)   rJ   qsizes      r   r7   zLifoDiskQueue.__init__   s    	77>>$$&DFFFKK/E!==)9)95ALTYFFKK2;;'$&DFFFLLT%5%5q9:DIr   r\   c                 f   t        |t              s-t        dj                  t	        |      j
                              | j                  j                  |       t        j                  | j                  t        |            }| j                  j                  |       | xj                  dz  c_        y )Nr^   r_   )ra   rb   rc   rd   r   r   r   rh   re   rf   r   rA   r`   )r)   r\   ssizes      r   r   zLifoDiskQueue.push   st    &%(299$v,:O:OPQQVD,,c&k:U		Q	r   c                 X   | j                   sy | j                  j                  | j                   t        j
                         t        j                  | j                  | j                  j                               \  }| j                  j                  | | j                  z
  t        j
                         | j                  j                  |      }| j                  j                  | t        j                         | j                  j                          | xj                   dz  c_         |S )Nr_   )r`   r   r   r   rQ   r   re   rt   r   rr   r}   truncater)   r`   r{   s      r   r   zLifoDiskQueue.pop   s    yyT^^OR[[1-- 0 0$&&++-@TEDNN*BKK8vv{{4 TE2;;'		Q	r   c                    | j                   sy | j                  j                  | j                   t        j
                         t        j                  | j                  | j                  j                               \  }| j                  j                  | | j                  z
  t        j
                         | j                  j                  |      }|S r   )
r`   r   r   r   rQ   r   re   rt   r   rr   r   s      r   r   zLifoDiskQueue.peek   s    yyT^^OR[[1-- 0 0$&&++-@TEDNN*BKK8vv{{4 r   c                 d   | j                   r^| j                  j                  d       | j                  j                  t	        j
                  | j                  | j                                | j                  j                          | j                   s t        j                  | j                         y y r=   )r`   r   r   rh   re   rf   r   r   rQ   ru   rJ   r,   s    r   r   zLifoDiskQueue.close   sf    99FFKKNFFLLT%5%5tyyAByyIIdii  r   c                     | j                   S r   )r`   r,   s    r   r   zLifoDiskQueue.__len__   s    yyr   r1   )r   r   r   r   r   re   r   r   r   r7   rb   r   r   r   r   r   r   r   r    r   r   r   r      sq     K,I
S 
T 
5 T 
Xe_ 
huo ! r   r   c                   x    e Zd ZdZdZdZdZdZdeddfd	Z	d
e
ddfdZdee
   fdZdee
   fdZddZdefdZy)FifoSQLiteQueuezRCREATE TABLE IF NOT EXISTS queue (id INTEGER PRIMARY KEY AUTOINCREMENT, item BLOB)zSELECT COUNT(*) FROM queuez#INSERT INTO queue (item) VALUES (?)z.SELECT id, item FROM queue ORDER BY id LIMIT 1zDELETE FROM queue WHERE id = ?rJ   r$   Nc                 :   t         j                  j                  |      | _        t	        j
                  | j                  d      | _        t        | j                  _        | j                  5 }|j                  | j                         d d d        y # 1 sw Y   y xY w)N<   )timeout)rQ   rJ   abspath_pathsqlite3
Connection_dbrb   text_factoryexecute_sql_create)r)   rJ   conns      r   r7   zFifoSQLiteQueue.__init__  sj    WW__T*
%%djj"= %XX 	+LL))*	+ 	+ 	+s   ,BBitemc                     t        |t              s-t        dj                  t	        |      j
                              | j                  5 }|j                  | j                  |f       d d d        y # 1 sw Y   y xY w)Nr^   )	ra   rb   rc   rd   r   r   r   r   	_sql_push)r)   r   r   s      r   r   zFifoSQLiteQueue.push  s_    $&299$t*:M:MNOOXX 	2LL$1	2 	2 	2s   
A11A:c                     | j                   5 }|j                  | j                        D ].  \  }}|j                  | j                  |f       |c cd d d        S  	 d d d        y # 1 sw Y   y xY wr   )r   r   _sql_pop_sql_del)r)   r   id_r   s       r   r   zFifoSQLiteQueue.pop  sh    XX 	!\\$--8 	TT]]SF3	 		 		 s   AA$A$$A-c                     | j                   5 }|j                  | j                        D ]  \  }}|c cd d d        S  	 d d d        y # 1 sw Y   y xY wr   )r   r   r   )r)   r   r~   r   s       r   r   zFifoSQLiteQueue.peek  sT    XX 	<<6 4	 		 	 s   %AAAc                     t        |       }| j                  j                          |s t        j                  | j
                         y y r   )rA   r   r   rQ   ru   r   )r)   r`   s     r   r   zFifoSQLiteQueue.close!  s1    4yIIdjj! r   c                     | j                   5 }t        |j                  | j                              d   cd d d        S # 1 sw Y   y xY wr=   )r   nextr   	_sql_size)r)   r   s     r   r   zFifoSQLiteQueue.__len__'  s:    XX 	9T^^45a8	9 	9 	9s	   '>Ar1   )r   r   r   r   r   r   r   r   r   r7   rb   r   r   r   r   r   r   r   r    r   r   r   r      sr    fK,I5I?H/H+S +T +2 24 2Xe_ huo "9 9r   r   c                       e Zd ZdZy)LifoSQLiteQueuez3SELECT id, item FROM queue ORDER BY id DESC LIMIT 1N)r   r   r   r   r    r   r   r   r   ,  s    DHr   r   )r   r   rQ   r   re   abcr   collectionsr   
contextlibr   typingr   r   r   r	   r"   r4   rC   rH   r   r   r   r    r   r   <module>r      s      	       
T 
.. * ,.o .j  j Z8 8v)9 )9XEo Er   