a
    Z6h                     @   sN   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 dZdS )    deque)Lock)Enum)AnyOptionalDictListc                   @   s   e Zd ZG dd deZdeddddZejfeee	dd	d
Z
ee dddZedddZeedddZddddZeddddZe	dddZee	dddZdS )	TaskQueuec                   @   s   e Zd ZdZdZdZdS )zTaskQueue.PriorityZhighZnormalZlowN)__name__
__module____qualname__ZHIGHZNORMALLOW r   r   '/var/aqua_controller/core/task_queue.pyPriority   s   r   d   N)max_sizereturnc                 C   s$   dd t jD | _t | _|| _d S )Nc                 S   s   i | ]}|t  qS r   r   ).0levelr   r   r   
<dictcomp>   s   z&TaskQueue.__init__.<locals>.<dictcomp>)r
   r   queuesr   lockr   )selfr   r   r   r   __init__   s
    zTaskQueue.__init__)taskpriorityr   c                 C   s   | j r |  | jkr&W d    dS || jvr@W d    dS |d u rXW d    dS | j| | W d    dS 1 s~0    Y  d S )NFT)r   sizer   r   append)r   r   r   r   r   r   set_task#   s    
zTaskQueue.set_task)r   c                 C   sb   | j H | jD ].}| j| r| j|    W  d    S qW d    d S 1 sT0    Y  d S N)r   r   r   popleft)r   r   r   r   r   get_task3   s
    

"zTaskQueue.get_taskc                 C   s   t dd | j D S )Nc                 s   s   | ]}t |V  qd S r!   )len)r   queuer   r   r   	<genexpr>=       z!TaskQueue.size.<locals>.<genexpr>)sumr   valuesr   r   r   r   r   <   s    zTaskQueue.size)r   r   c                 C   sP   | j 6 || jvr td| t| j| W  d    S 1 sB0    Y  d S Nu<   неизвестный уровень приоритета: )r   r   
ValueErrorr$   r   r   r   r   r   size_by_priorityB   s    
zTaskQueue.size_by_priorityc                 C   sB   | j ( | j D ]}|  qW d    n1 s40    Y  d S r!   )r   r   r)   clear)r   r%   r   r   r   r/   I   s    zTaskQueue.clearc                 C   sP   | j 6 || jvr td| | j|   W d    n1 sB0    Y  d S r+   )r   r   r,   r/   r-   r   r   r   clear_by_priorityP   s    
zTaskQueue.clear_by_priorityc                 C   s   |   dkS Nr   )r   r*   r   r   r   is_emptyX   s    zTaskQueue.is_emptyc                 C   s   |  |dkS r1   )r.   r-   r   r   r   is_empty_by_priority^   s    zTaskQueue.is_empty_by_priority)r   )r   r   r   r   r   intr   r   dictboolr    r   r#   r   r.   r/   r0   r2   r3   r   r   r   r   r
      s   	r
   N)collectionsr   	threadingr   enumr   typingr   r   r   r	   r
   r   r   r   r   <module>   s   