
    Dh %                    "   d dl m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 d dlmZmZ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)    )annotationsN)abstractmethod)deque)suppress)Path)AnyBinaryIOLiteralcastc                       e Zd ZdZddZddZy)_BaseQueueMetazJ
    Metaclass to check queue classes against the necessary interface
    c                6    | j                  t        |            S N)__subclasscheck__type)clsinstances     p/var/www/fastuser/data/www/generator.snapmosaic.io/flask_app/venv/lib/python3.12/site-packages/queuelib/queue.py__instancecheck__z _BaseQueueMeta.__instancecheck__   s    $$N
 	
    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)r   r   returnbool)r   r   r    r!   )__name__
__module____qualname____doc__r   r    r   r   r   r      s    


r   r   c                  \    e Zd Zedd       Zedd       Zedd       Zed	d       Zd
dZy)	BaseQueuec                    t         r   NotImplementedErrorselfobjs     r   r   zBaseQueue.push(       !!r   c                    t         r   r*   r-   s    r   r   zBaseQueue.pop,   r/   r   c                    t         r   r*   r1   s    r   r   zBaseQueue.peek0   r/   r   c                    t         r   r*   r1   s    r   r   zBaseQueue.__len__4   r/   r   c                     y r   r&   r1   s    r   r   zBaseQueue.close8       r   Nr.   r   r    Noner    z
Any | Noner    intr    r7   )	r"   r#   r$   r   r   r   r   r   r   r&   r   r   r(   r(   '   sU    " " " " " " " "r   r(   )	metaclassc                  @    e Zd ZdZd	dZd
dZddZddZd	dZddZ	y)FifoMemoryQueuez7In-memory FIFO queue, API compliant with FifoDiskQueue.c                "    t               | _        y r   )r   qr1   s    r   __init__zFifoMemoryQueue.__init__?   s    "Wr   c                :    | j                   j                  |       y r   )r@   appendr,   s     r   r   zFifoMemoryQueue.pushB   s    cr   c                R    | j                   r| j                   j                         S d S r   )r@   popleftr1   s    r   r   zFifoMemoryQueue.popE   s    #'66tvv~~3t3r   c                <    | j                   r| j                   d   S d S Nr   r@   r1   s    r   r   zFifoMemoryQueue.peekH   s     FFtvvay,,r   c                     y r   r&   r1   s    r   r   zFifoMemoryQueue.closeK   r5   r   c                ,    t        | j                        S r   )lenr@   r1   s    r   r   zFifoMemoryQueue.__len__N   s    466{r   Nr;   r6   r8   r9   )
r"   r#   r$   r%   rA   r   r   r   r   r   r&   r   r   r>   r>   <   s#    A%4-r   r>   c                       e Zd ZdZddZddZy)LifoMemoryQueuez7In-memory LIFO queue, API compliant with LifoDiskQueue.c                R    | j                   r| j                   j                         S d S r   )r@   r   r1   s    r   r   zLifoMemoryQueue.popU   s    #vvtvvzz|/4/r   c                <    | j                   r| j                   d   S d S )NrH   r1   s    r   r   zLifoMemoryQueue.peekX   s    !VVtvvbz--r   Nr8   )r"   r#   r$   r%   r   r   r&   r   r   rM   rM   R   s    A0.r   rM   c                      e Zd ZdZdZ ej                  e      ZdddZddZ	dddZ
ddZddZddZdd	Zdd
ZddZddZddZy)FifoDiskQueuezPersistent FIFO queue.>Lc                   t        |      | _        t        |      j                         st        |      j	                  d       | j                  |      | _        | j                  d   | _        | j                  | j                  d   d   d      | _	        | j                  | j                  d   d         | _
        t        j                  | j                  j                         | j                  d   d   t        j                         y )	NT)parents	chunksizeheadr   ab+tail   )strpathr   existsmkdir	_loadinfoinforV   
_openchunkheadftailfoslseekfilenoSEEK_SET)r-   r\   rV   s      r   rA   zFifoDiskQueue.__init__b   s    I	Dz  "JT*NN9-	;/__TYYv%6q%95A
__TYYv%6q%9:

""$dii&7&:BKKHr   c                &   t        |t              s!t        d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: rW      r   rX   size)
isinstancebytes	TypeErrorr   r"   r`   structpackszhdr_formatrK   rd   writerb   rf   rV   r   ra   )r-   stringhnumhposszhdrs        r   r   zFifoDiskQueue.pushl   s    &%(0f1F1F0GHIIYYv&
d	D--s6{;
""$efn54>>!DAIDJJu5DJ		&Q!4L		&r   c                T    t        | j                  d|d      j                  |      S )Nr@   05d)r   r\   open)r-   numbermodes      r   ra   zFifoDiskQueue._openchunk{   s'    DII6#,/055d;;r   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(  r{|| j                   d   d   k  rfdx}}|dz  }| j                  j                          t        | j                  j                        j                          | j                  |      | _        | j                   dxx   dz  cc<   |||g| j                   d<   |S )NrY   rW   rj   r   rk   )r`   rc   rf   rd   read
szhdr_sizero   unpackrq   rV   r   r   nameunlinkra   )r-   tnumtcnttoffsettfdrv   rk   datas           r   r   zFifoDiskQueue.pop~   s:   "ii/dG$<499V,,jj!T__--- 1 159wwsD!	4??T))4>>!ddii.?.B&BD7AIDJJ!((*.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 )NrY   rW   r   )r`   rc   rf   rd   re   SEEK_CURr}   r~   ro   r   rq   rg   )	r-   r   r   _r   tfd_initial_posrv   rk   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 rG   )rb   r   rc   	_saveinfor`   rK   _cleanupr1   s    r   r   zFifoDiskQueue.close   sK    



tyy!t9>MMO r   c                <    t        t        | j                  d         S )Nrk   )r   r:   r`   r1   s    r   r   zFifoDiskQueue.__len__   s    C6*++r   c                    | j                         }|j                         r@t        t        t        t
        f   t        j                  |j                                     }|S |dg dddgd}|S )Nr   )r   r   r   )rV   rk   rY   rW   )		_infopathr]   r   dictr[   r   jsonloads	read_text)r-   rV   infopathr`   s       r   r_   zFifoDiskQueue._loadinfo   se    >>#??S#X

83E3E3G(HID  '!A	D r   c                h    | j                         j                  t        j                  |             y r   )r   
write_textr   dumps)r-   r`   s     r   r   zFifoDiskQueue._saveinfo   s     ##DJJt$45r   c                .    t        | j                  d      S )N	info.json)r   r\   r1   s    r   r   zFifoDiskQueue._infopath   s    DII{++r   c                L   t        | j                        j                  d      D ]  }|j                           t        | j                  d      j                          t	        t
              5  t        | j                        j                          d d d        y # 1 sw Y   y xY w)Nzq*r   )r   r\   globr   r   OSErrorrmdir)r-   xs     r   r   zFifoDiskQueue._cleanup   su    dii%%d+ 	AHHJ	TYY$++-g 	$O!!#	$ 	$ 	$s   -$BB#N)i )r\   str | os.PathLike[str]rV   r:   r    r7   rs   rm   r    r7   )rb)rz   r:   r{   zLiteral['rb', 'ab+']r    r	   r    zbytes | Noner;   r9   )rV   r:   r    dict[str, Any])r`   r   r    r7   )r    r   )r"   r#   r$   r%   rq   ro   calcsizer~   rA   r   ra   r   r   r   r   r_   r   r   r   r&   r   r   rR   rR   \   sR     L .JI)<,,6,$r   rR   c                  h    e Zd ZdZdZ ej                  e      Zd
dZddZ	ddZ
ddZddZddZy	)LifoDiskQueuezPersistent LIFO queue.rS   c                D   |  t        |      | _        t        |      j                         rt        |      j	                  d      | _        | j
                  j                  | j                        }t        j                  | j                  |      \  | _        | j
                  j                  dt        j                         y t        |      j	                  d      | _        | j
                  j                  t        j                   | j                  d             d| _        y )Nzrb+r   zwb+)r[   r\   r   r]   ry   fr}   	SIZE_SIZEro   r   SIZE_FORMATrk   seekrd   SEEK_ENDrr   rp   )r-   r\   qsizes      r   rA   zLifoDiskQueue.__init__   s    I	:$Z__U+DFFFKK/E!==)9)95ALTYFFKK2;;'$Z__U+DFFFLLT%5%5q9:DIr   c                N   t        |t              s!t        dt        |      j                         | j
                  j                  |       t        j                  | j                  t        |            }| j
                  j                  |       | xj                  dz  c_        y )Nri   rj   )rl   rm   rn   r   r"   r   rr   ro   rp   r   rK   rk   )r-   rs   ssizes      r   r   zLifoDiskQueue.push   sq    &%(0f1F1F0GHII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 )Nrj   )rk   r   r   r   rd   r   ro   r   r   r}   r   truncate)r-   rk   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   )
rk   r   r   r   rd   r   ro   r   r   r}   r-   rk   s     r   r   zLifoDiskQueue.peek   s~    yyT^^OR[[1-- 0 0$&&++-@TEDNN*BKK8vv{{4  r   c                l   | j                   r^| j                  j                  d       | j                  j                  t	        j
                  | j                  | j                                | j                  j                          | j                   s$t        | j                        j                          y y rG   )rk   r   r   rr   ro   rp   r   r   r   r\   r   r1   s    r   r   zLifoDiskQueue.close   sj    99FFKKNFFLLT%5%5tyyAByyO""$ r   c                    | j                   S r   )rk   r1   s    r   r   zLifoDiskQueue.__len__   s    yyr   Nr\   r   r    r7   r   r   r;   r9   )r"   r#   r$   r%   r   ro   r   r   rA   r   r   r   r   r   r&   r   r   r   r      s8     K,I
!%r   r   c                  P    e Zd ZdZdZdZdZdZddZddZ	ddZ
dd	Zdd
Zd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 = ?c                .   t        |      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)
r   resolve_pathsqlite3
Connection_dbrm   text_factoryexecute_sql_create)r-   r\   conns      r   rA   zFifoSQLiteQueue.__init__	  sj    $Z'')
%%djj"= %XX 	+LL))*	+ 	+ 	+s   &BBc                    t        |t              s!t        dt        |      j                         | j
                  5 }|j                  | j                  |f       d d d        y # 1 sw Y   y xY w)Nri   )rl   rm   rn   r   r"   r   r   	_sql_push)r-   itemr   s      r   r   zFifoSQLiteQueue.push  s\    $&0d1D1D0EFGGXX 	2LL$1	2 	2 	2s   A%%A.c                    | j                   5 }|j                  | j                        D ]<  \  }}|j                  | j                  |f       t	        t
        |      c cd d d        S  	 d d d        y # 1 sw Y   y xY wr   )r   r   _sql_pop_sql_delr   rm   )r-   r   id_r   s       r   r   zFifoSQLiteQueue.pop  sp    XX 	)!\\$--8 )	TT]]SF3E4((	) 	))	) 		) s   AA2'A22A;c                    | j                   5 }|j                  | j                        D ]  \  }}t        t        |      c cd d d        S  	 d d d        y # 1 sw Y   y xY wr   )r   r   r   r   rm   )r-   r   r   r   s       r   r   zFifoSQLiteQueue.peek  s\    XX 	)<<6 )4E4((	) 	))	) 	) s   3A
AAc                    t        |       }| j                  j                          |s| j                  j	                          y y r   )rK   r   r   r   r   r   s     r   r   zFifoSQLiteQueue.close#  s1    4yJJ r   c           	         | j                   5 }t        t        t        |j	                  | j
                              d         cd d d        S # 1 sw Y   y xY wrG   )r   r   r:   nextr   	_sql_size)r-   r   s     r   r   zFifoSQLiteQueue.__len__)  sE    XX 	DT$,,t~~">?BC	D 	D 	Ds   5AANr   )r   rm   r    r7   r   r;   r9   )r"   r#   r$   r   r   r   r   r   rA   r   r   r   r   r   r&   r   r   r   r     s:    fK,I5I?H/H+2 Dr   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   )
__future__r   r   rd   r   ro   abcr   collectionsr   
contextlibr   pathlibr   typingr   r	   r
   r   r   r   r(   r>   rM   rR   r   r   r   r&   r   r   <module>r      s    "  	       / /
T 
2. * ,.o .h$ h$V8 8v)D )DXEo Er   