
    Tg%e-$                     <   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dS )    N)abstractmethod)deque)suppress)AnyOptionalc                       e Zd ZdZd Zd ZdS )_BaseQueueMetazJ
    Metaclass to check queue classes against the necessary interface
    c                 F    |                      t          |                    S N)__subclasscheck__type)clsinstances     .lib/python3.11/site-packages/queuelib/queue.py__instancecheck__z _BaseQueueMeta.__instancecheck__   s    $$T(^^444    c                 j   t          |d          ot          |j                  ot          |d          ot          |j                  okt          |d          o[t          |j                  oGt          |d          o7t          |j                  o#t          |d          o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 5 5
 
 
 
 
r   r	   c                       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
dS )
	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                     d S 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"   #   s        $ $ $ $ $ ^$ $Xc] $ $ $ ^$ $hsm $ $ $ ^$ $ $ ^$     r   r"   )	metaclassc                   h    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dS )FifoMemoryQueuez7In-memory FIFO queue, API compliant with FifoDiskQueue.r$   Nc                 ,    t                      | _        d S r   )r   qr,   s    r   __init__zFifoMemoryQueue.__init__;   s    r   r#   c                 :    | j                             |           d S r   )r6   appendr(   s     r   r   zFifoMemoryQueue.push>   s    cr   c                 F    | j         r| j                                         nd S r   )r6   popleftr,   s    r   r   zFifoMemoryQueue.popA   s     #'63tv~~t3r   c                 .    | j         r| j         d         nd S Nr   r6   r,   s    r   r   zFifoMemoryQueue.peekD   s     F,tvayy,r   c                     d S 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    46{{r   r1   )r   r   r   r   r7   r   r   r   r   r   r   r   r    r   r   r4   r4   8   s        AA        4Xc] 4 4 4 4-hsm - - - -       r   r4   c                   B    e Zd ZdZdee         fdZdee         fdZdS )LifoMemoryQueuez7In-memory LIFO queue, API compliant with LifoDiskQueue.r$   c                 F    | j         r| j                                         nd S r   )r6   r   r,   s    r   r   zLifoMemoryQueue.popQ   s    #v/tvzz|||4/r   c                 .    | j         r| j         d         nd S )Nr>   r,   s    r   r   zLifoMemoryQueue.peekT   s    !V-tvbzz-r   N)r   r   r   r   r   r   r   r   r    r   r   rC   rC   N   sX        AA0Xc] 0 0 0 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dS )FifoDiskQueuezPersistent FIFO queue.>L順 path	chunksizer$   Nc                    || _         t          j                             |          st          j        |           |                     |          | _        | j        d         | _        |                     | j        d         d         d          | _        |                     | j        d         d                   | _	        t          j
        | j	                                        | j        d         d         t          j                   d S )NrL   headr   ab+tail   )rK   osexistsmakedirs	_loadinfoinforL   
_openchunkheadftailflseekfilenoSEEK_SET)r)   rK   rL   s      r   r7   zFifoDiskQueue.__init__^   s    	w~~d## 	KNN9--	;/__TYv%6q%95AA
__TYv%6q%9::

""$$di&7&:BKHHHHHr   stringc                 <   t          |t                    s4t          d                    t	          |          j                            | j        d         \  }}|dz  }t          j        | j	        t          |                    }t          j        | j                                        ||z              || j        k    r;d}|dz  }| j                                         |                     |d          | _        | j        dxx         dz  cc<   ||g| j        d<   d S )NUnsupported type: {}rN      r   rO   size)
isinstancebytes	TypeErrorformatr   r   rV   structpackszhdr_formatrA   rR   writerX   r[   rL   r   rW   )r)   r]   hnumhposszhdrs        r   r   zFifoDiskQueue.pushh   s
   &%(( 	R299$v,,:OPPQQQYv&
d	D-s6{{;;
""$$efn5554>!!DAIDJu55DJ	&Q!4L	&r   rbnumbermodec                 n    t          t          j                            | j        d|z            |          S )Nzq%05d)openrR   rK   join)r)   rn   ro   s      r   rW   zFifoDiskQueue._openchunkw   s)    BGLLGf,<==tDDDr   c                    | j         d         \  }}}||g| j         d         k    rd S | j                                        }t          j        || j                  }|sd S t          j        | j        |          \  }t          j        ||          }|dz  }|| j        |z   z  }|| j	        k    rq|| j         d         d         k    rZdx}}|dz  }| j        
                                 t          j        | j        j                   |                     |          | _        | j         dxx         dz  cc<   |||g| j         d<   |S )NrP   rN   r`   r   ra   )rV   rY   r[   rR   read
szhdr_sizerf   unpackrh   rL   r   removenamerW   )r)   tnumtcnttoffsettfdrl   ra   datas           r   r   zFifoDiskQueue.popz   sK   "i/dG$<49V,,,4j!!T_-- 	4- 1599wsD!!	4?T))4>!!ddi.?.B&B&BD7AIDJIdjo&&&..DJ	&Q!41	&r   c                    | j         d         \  }}}||g| j         d         k    rd S | j                                        }t          j        |dt          j                  }t          j        || j                  }|sd S t          j	        | j
        |          \  }t          j        ||          }t          j        ||t          j                   |S )NrP   rN   r   )rV   rY   r[   rR   rZ   SEEK_CURrt   ru   rf   rv   rh   r\   )	r)   ry   rz   _r|   tfd_initial_posrl   ra   r}   s	            r   r   zFifoDiskQueue.peek   s    	&)dA$<49V,,,4j!!(32;77T_-- 	4- 1599wsD!!
or{333r   c                     | j                                          | j                                         |                     | j                   t          |           dk    r|                                  d S d S r=   )rX   r   rY   	_saveinforV   rA   _cleanupr,   s    r   r   zFifoDiskQueue.close   se    

ty!!!t99>>MMOOOOO >r   c                     | j         d         S )Nra   )rV   r,   s    r   r   zFifoDiskQueue.__len__   s    y  r   c                     |                                  }t          j                            |          r<t	          |          5 }t          j        |          }d d d            n# 1 swxY w Y   n|dg dddgd}|S )Nr   )r   r   r   )rL   ra   rP   rN   )	_infopathrR   rK   rS   rq   jsonload)r)   rL   infopathfrV   s        r   rU   zFifoDiskQueue._loadinfo   s    >>##7>>(## 		h $1y||$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ '!		A	 D s   A$$A(+A(rV   c                     t          |                                 d          5 }t          j        ||           d d d            d S # 1 swxY w Y   d S )Nw)rq   r   r   dump)r)   rV   r   s      r   r   zFifoDiskQueue._saveinfo   s    $..""C(( 	AIdA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA
A
c                 L    t           j                            | j        d          S )N	info.json)rR   rK   rr   r,   s    r   r   zFifoDiskQueue._infopath   s    w||DI{333r   c                    t          j         t          j                            | j        d                    D ]}t          j        |           t          j        t          j                            | j        d                     t          t                    5  t          j        | j                   d d d            d S # 1 swxY w Y   d S )Nzq*r   )globrR   rK   rr   rw   r   OSErrorrmdir)r)   xs     r   r   zFifoDiskQueue._cleanup   s    27<<	48899 	 	AIaLLLL
	"',,ty+66777g 	  	 HTY	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   CCC)rJ   )rm   r1   )r   r   r   r   rh   rf   calcsizeru   strintr7   rc   r   rW   r   r   r   r   r   dictrU   r   r   r   r    r   r   rH   rH   X   s         L ..JI IS IS Id I I I I)5 )T ) ) ) )E E EC E E E EXe_    ,huo       ! ! ! ! !3 4    d t    43 4 4 4 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dS )LifoDiskQueuezPersistent LIFO queue.rI   rK   r$   Nc                    || _         t          j                             |          r|t          |d          | _        | j                            | j                  }t          j        | j	        |          \  | _
        | j                            dt          j                   d S t          |d          | _        | j                            t          j        | j	        d                     d| _
        d S )Nzrb+r   zwb+)rK   rR   rS   rq   r   rt   	SIZE_SIZErf   rv   SIZE_FORMATra   seekSEEK_ENDri   rg   )r)   rK   qsizes      r   r7   zLifoDiskQueue.__init__   s    	7>>$ 	$&&DFFKK//E!=)95AALTYFKK2;'''''$&&DFFLLT%5q99:::DIIIr   r]   c                 n   t          |t                    s4t          d                    t	          |          j                            | j                            |           t          j	        | j
        t          |                    }| j                            |           | xj        dz  c_        d S )Nr_   r`   )rb   rc   rd   re   r   r   r   ri   rf   rg   r   rA   ra   )r)   r]   ssizes      r   r   zLifoDiskQueue.push   s    &%(( 	R299$v,,:OPPQQQVD,c&kk::U		Q				r   c                    | j         sd S | j                            | j         t          j                   t          j        | j        | j        	                                          \  }| j                            | | j        z
  t          j                   | j        	                    |          }| j                            | t          j
                   | j                                         | xj         dz  c_         |S )Nr`   )ra   r   r   r   rR   r   rf   rv   r   rt   r   truncater)   ra   r}   s      r   r   zLifoDiskQueue.pop   s    y 	4T^OR[111- 0$&++--@@TEDN*BK888v{{4  TE2;'''		Q		r   c                 d   | j         sd S | j                            | j         t          j                   t          j        | j        | j        	                                          \  }| j                            | | j        z
  t          j                   | j        	                    |          }|S r   )
ra   r   r   r   rR   r   rf   rv   r   rt   r   s      r   r   zLifoDiskQueue.peek   s    y 	4T^OR[111- 0$&++--@@TEDN*BK888v{{4  r   c                 ,   | j         rQ| j                            d           | j                            t	          j        | j        | j                              | j                                         | j         st          j	        | j
                   d S d S r=   )ra   r   r   ri   rf   rg   r   r   rR   rw   rK   r,   s    r   r   zLifoDiskQueue.close   s~    9 	CFKKNNNFLLT%5tyAABBBy 	!Idi     	! 	!r   c                     | j         S r   )ra   r,   s    r   r   zLifoDiskQueue.__len__   s
    yr   r1   )r   r   r   r   r   rf   r   r   r   r7   rc   r   r   r   r   r   r   r   r    r   r   r   r      s          K,,I
S 
T 
 
 
 
5 T    
Xe_ 
 
 
 
huo    ! ! ! !      r   r   c                       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dS )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 = ?rK   r$   Nc                 $   t           j                            |          | _        t	          j        | j        d          | _        t          | j        _        | j        5 }|	                    | j
                   d d d            d S # 1 swxY w Y   d S )N<   )timeout)rR   rK   abspath_pathsqlite3
Connection_dbrc   text_factoryexecute_sql_create)r)   rK   conns      r   r7   zFifoSQLiteQueue.__init__  s    W__T**
%dj"=== %X 	+LL)***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   BB	B	itemc                    t          |t                    s4t          d                    t	          |          j                            | j        5 }|                    | j        |f           d d d            d S # 1 swxY w Y   d S )Nr_   )	rb   rc   rd   re   r   r   r   r   	_sql_push)r)   r   r   s      r   r   zFifoSQLiteQueue.push  s    $&& 	P299$t**:MNNOOOX 	2LL$111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   A;;A?A?c                     | j         5 }|                    | j                  D ]0\  }}|                    | j        |f           |c cd d d            S 	 d d d            n# 1 swxY w Y   d S r   )r   r   _sql_pop_sql_del)r)   r   id_r   s       r   r   zFifoSQLiteQueue.pop  s    X 	!\\$-88  	TT]SF333	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ts   ?A!!A%(A%c                     | j         5 }|                    | j                  D ]\  }}|c cd d d            S 	 d d d            n# 1 swxY w Y   d S r   )r   r   r   )r)   r   r   r   s       r   r   zFifoSQLiteQueue.peek  s    X 	<<66  4	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ts   #AA	A	c                     t          |           }| j                                         |st          j        | j                   d S d S r   )rA   r   r   rR   rw   r   )r)   ra   s     r   r   zFifoSQLiteQueue.close!  sI    4yy 	"Idj!!!!!	" 	"r   c                     | j         5 }t          |                    | j                            d         cd d d            S # 1 swxY w Y   d S r=   )r   nextr   	_sql_size)r)   r   s     r   r   zFifoSQLiteQueue.__len__'  s    X 	9T^4455a8	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   -AA	Ar1   )r   r   r   r   r   r   r   r   r   r7   rc   r   r   r   r   r   r   r   r    r   r   r   r      s        fK,I5I?H/H+S +T + + + +2 24 2 2 2 2Xe_    huo    " " " "9 9 9 9 9 9 9r   r   c                       e Zd ZdZdS )LifoSQLiteQueuez3SELECT id, item FROM queue ORDER BY id DESC LIMIT 1N)r   r   r   r   r    r   r   r   r   ,  s        DHHHr   r   )r   r   rR   r   rf   abcr   collectionsr   
contextlibr   typingr   r   r   r	   r"   r4   rC   rH   r   r   r   r    r   r   <module>r      s     				                                    
 
 
 
 
T 
 
 
.    .    *       ,. . . . .o . . .j  j  j  j  j  j  j  j Z8 8 8 8 8 8 8 8v)9 )9 )9 )9 )9 )9 )9 )9XE E E E Eo E E E E Er   