a
    pw¦ZÒ  ã                   @   s˜   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 G dd„ deƒZG dd„ deƒZ	G dd„ deƒZ
G d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZdS )é    N)Údequec                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚFifoMemoryQueuez7In-memory FIFO queue, API compliant with FifoDiskQueue.c                 C   s   t ƒ | _| jj| _d S ©N)r   ÚqÚappendÚpush©Úself© r
   ú-lib/python3.9/site-packages/queuelib/queue.pyÚ__init__   s    zFifoMemoryQueue.__init__c                 C   s   | j }|r| ¡ S d S r   )r   Úpopleft©r	   r   r
   r
   r   Úpop   s    zFifoMemoryQueue.popc                 C   s   d S r   r
   r   r
   r
   r   Úclose   s    zFifoMemoryQueue.closec                 C   s
   t | jƒS r   )Úlenr   r   r
   r
   r   Ú__len__   s    zFifoMemoryQueue.__len__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r
   r
   r
   r   r   	   s
   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚLifoMemoryQueuez7In-memory LIFO queue, API compliant with LifoDiskQueue.c                 C   s   | j }|r| ¡ S d S r   )r   r   r   r
   r
   r   r      s    zLifoMemoryQueue.popN)r   r   r   r   r   r
   r
   r
   r   r      s   r   c                   @   sr   e Zd ZdZdZe 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S )ÚFifoDiskQueuezPersistent FIFO queue.ú>Lé † c                 C   s†   || _ tj  |¡st |¡ |  |¡| _| jd | _|  | jd d d¡| _|  | jd d ¡| _	t 
| j	 ¡ | jd d tj¡ d S )NÚ	chunksizeÚheadr   úab+Útailé   )ÚpathÚosÚexistsÚmakedirsÚ	_loadinfoÚinfor   Ú
_openchunkÚheadfÚtailfÚlseekÚfilenoÚSEEK_SET)r	   r    r   r
   r
   r   r   )   s    
zFifoDiskQueue.__init__c                 C   s®   t |tƒstd t|ƒj¡ƒ‚| jd \}}|d7 }t | j	t
|ƒ¡}t | j ¡ || ¡ || jkrŠd}|d7 }| j ¡  |  |d¡| _| jd  d7  < ||g| jd< d S )NúUnsupported type: {}r   é   r   r   Úsize)Ú
isinstanceÚbytesÚ	TypeErrorÚformatÚtyper   r%   ÚstructÚpackÚszhdr_formatr   r!   Úwriter'   r*   r   r   r&   )r	   ÚstringZhnumZhposÚszhdrr
   r
   r   r   3   s    


zFifoDiskQueue.pushÚrbc                 C   s   t tj | jd| ¡|ƒS )Nzq%05d)Úopenr!   r    Újoin)r	   ZnumberÚmoder
   r
   r   r&   B   s    zFifoDiskQueue._openchunkc                 C   sî   | j d \}}}||g| j d kr&d S | j ¡ }t || j¡}|sFd S t | j|¡\}t ||¡}|d7 }|| j| 7 }|| j	krÈ|| j d d krÈd }}|d7 }| j 
¡  t | jj¡ |  |¡| _| j d  d8  < |||g| j d< |S )Nr   r   r-   r   r.   )r%   r(   r*   r!   ÚreadÚ
szhdr_sizer4   Úunpackr6   r   r   ÚremoveÚnamer&   )r	   ZtnumZtcntZtoffsetZtfdr9   r.   Údatar
   r
   r   r   E   s(    

zFifoDiskQueue.popc                 C   s8   | j  ¡  | j ¡  |  | j¡ t| ƒdkr4|  ¡  d S ©Nr   )r'   r   r(   Ú	_saveinfor%   r   Ú_cleanupr   r
   r
   r   r   [   s
    

zFifoDiskQueue.closec                 C   s
   | j d S )Nr.   )r%   r   r
   r
   r   r   b   s    zFifoDiskQueue.__len__c                 C   sb   |   ¡ }tj |¡rHt|ƒ}t |¡}W d   ƒ q^1 s<0    Y  n|dg d¢ddgdœ}|S )Nr   )r   r   r   )r   r.   r   r   )Ú	_infopathr!   r    r"   r;   ÚjsonÚload)r	   r   ZinfopathÚfr%   r
   r
   r   r$   e   s    
*üzFifoDiskQueue._loadinfoc                 C   s>   t |  ¡ dƒ}t ||¡ W d   ƒ n1 s00    Y  d S )NÚw)r;   rG   rH   Údump)r	   r%   rJ   r
   r
   r   rE   s   s    zFifoDiskQueue._saveinfoc                 C   s   t j | jd¡S )Nú	info.json)r!   r    r<   r   r
   r
   r   rG   w   s    zFifoDiskQueue._infopathc                 C   sX   t   tj | jd¡¡D ]}t |¡ qt tj | jd¡¡ t | j¡sTt | j¡ d S )Nzq*rM   )Úglobr!   r    r<   rA   ÚlistdirÚrmdir)r	   Úxr
   r
   r   rF   z   s
    zFifoDiskQueue._cleanupN)r   )r:   )r   r   r   r   r6   r4   Úcalcsizer?   r   r   r&   r   r   r   r$   rE   rG   rF   r
   r
   r
   r   r   #   s   



r   c                   @   sF   e Zd ZdZdZe e¡Zdd„ Zdd„ Z	dd„ Z
d	d
„ Zdd„ ZdS )ÚLifoDiskQueuezPersistent LIFO queue.r   c                 C   s|   || _ tj  |¡rPt|dƒ| _| j | j¡}t | j	|¡\| _
| j dtj¡ n(t|dƒ| _| j t | j	d¡¡ d| _
d S )Nzrb+r   zwb+)r    r!   r"   r;   rJ   r>   Ú	SIZE_SIZEr4   r@   ÚSIZE_FORMATr.   ÚseekÚSEEK_ENDr7   r5   )r	   r    Zqsizer
   r
   r   r   ‰   s    zLifoDiskQueue.__init__c                 C   sZ   t |tƒstd t|ƒj¡ƒ‚| j |¡ t 	| j
t|ƒ¡}| j |¡ |  jd7  _d S )Nr,   r-   )r/   r0   r1   r2   r3   r   rJ   r7   r4   r5   rU   r   r.   )r	   r8   Zssizer
   r
   r   r   •   s    
zLifoDiskQueue.pushc                 C   s†   | j s
d S | j | j tj¡ t | j| j 	¡ ¡\}| j | | j tj¡ | j 	|¡}| j | tj
¡ | j ¡  |  j d8  _ |S )Nr-   )r.   rJ   rV   rT   r!   rW   r4   r@   rU   r>   ÚSEEK_CURÚtruncate)r	   r.   rC   r
   r
   r   r      s    
zLifoDiskQueue.popc                 C   sJ   | j r*| j d¡ | j t | j| j ¡¡ | j ¡  | j sFt 	| j
¡ d S rD   )r.   rJ   rV   r7   r4   r5   rU   r   r!   rA   r    r   r
   r
   r   r   ©   s    
zLifoDiskQueue.closec                 C   s   | j S r   )r.   r   r
   r
   r   r   ±   s    zLifoDiskQueue.__len__N)r   r   r   r   rU   r4   rR   rT   r   r   r   r   r   r
   r
   r
   r   rS   ƒ   s   
rS   c                   @   sH   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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 = ?c                 C   s^   t j |¡| _tj| jdd| _t| j_| j}| 	| j
¡ W d   ƒ n1 sP0    Y  d S )Né<   )Ztimeout)r!   r    ÚabspathÚ_pathÚsqlite3Z
ConnectionÚ_dbr0   Ztext_factoryÚexecuteÚ_sql_create)r	   r    Úconnr
   r
   r   r   À   s
    zFifoSQLiteQueue.__init__c                 C   sX   t |tƒstd t|ƒj¡ƒ‚| j }| | j|f¡ W d   ƒ n1 sJ0    Y  d S )Nr,   )	r/   r0   r1   r2   r3   r   r_   r`   Ú	_sql_push)r	   Úitemrb   r
   r
   r   r   Ç   s    
zFifoSQLiteQueue.pushc                 C   sd   | j J}| | j¡D ],\}}| | j|f¡ |  W  d   ƒ S W d   ƒ n1 sV0    Y  d S r   )r_   r`   Ú_sql_popÚ_sql_del)r	   rb   Zid_rd   r
   r
   r   r   Î   s    zFifoSQLiteQueue.popc                 C   s&   t | ƒ}| j ¡  |s"t | j¡ d S r   )r   r_   r   r!   rA   r]   )r	   r.   r
   r
   r   r   Ô   s    
zFifoSQLiteQueue.closec                 C   s>   | j $}t| | j¡ƒd W  d   ƒ S 1 s00    Y  d S rD   )r_   Únextr`   Ú	_sql_size)r	   rb   r
   r
   r   r   Ú   s    zFifoSQLiteQueue.__len__N)r   r   r   ra   rh   rc   re   rf   r   r   r   r   r   r
   r
   r
   r   rZ   µ   s   ÿrZ   c                   @   s   e Zd ZdZdS )ÚLifoSQLiteQueuez3SELECT id, item FROM queue ORDER BY id DESC LIMIT 1N)r   r   r   re   r
   r
   r
   r   ri   ß   s   ri   )r!   rN   rH   r4   r^   Úcollectionsr   Úobjectr   r   r   rS   rZ   ri   r
   r
   r
   r   Ú<module>   s   `2*