a
    $Fwj                     @  s6   d dl mZ d dlmZ ddlmZ G dd dZdS )    )annotations)datetime   )	QueueItemc                   @  sZ   e Zd ZddddddZddddd	dd
ddZddddddZddddddZdS )OpportunityQueue2   intNone)max_sizereturnc                 C  s   || _ i | _d S N)r
   _items)selfr
    r   7/home/opc/hanz-radar/runtime/src/hanz_realtime/queue.py__init__	   s    zOpportunityQueue.__init__strfloatr   )symbolmarketscorereason
updated_atr   c                 C  sR   t |||||d| j||f< t| j| jkrN|  d | j }dd |D | _d S )N)r   r   r   r   r   c                 S  s   i | ]}|j |jf|qS r   )r   r   ).0itemr   r   r   
<dictcomp>       z+OpportunityQueue.upsert.<locals>.<dictcomp>)r   r   lenr
   ranked)r   r   r   r   r   r   Zkeepr   r   r   upsert   s    zOpportunityQueue.upsert)r   r   r   c                 C  s   | j ||fd  d S r   )r   pop)r   r   r   r   r   r   remove    s    zOpportunityQueue.removeNz
int | Nonezlist[QueueItem])limitr   c                 C  s.   t | j dd d}|d u r"|S |d | S )Nc                 S  s   | j  | j| jfS r   )r   r   r   )r   r   r   r   <lambda>&   r   z)OpportunityQueue.ranked.<locals>.<lambda>)key)sortedr   values)r   r"   itemsr   r   r   r   #   s
    zOpportunityQueue.ranked)r   )N)__name__
__module____qualname__r   r   r!   r   r   r   r   r   r      s   r   N)
__future__r   r   modelsr   r   r   r   r   r   <module>   s   