o
    ³tÃhG  ã                   @   s@   d dl mZ d dlmZmZmZ d dlmZ G dd„ deƒZdS )é    )Úabsolute_import)ÚBaseJobStoreÚJobLookupErrorÚConflictingIdError)Údatetime_to_utc_timestampc                       sp   e Zd ZdZ‡ f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dd„ Zdd„ Z‡  ZS )ÚMemoryJobStorezh
    Stores jobs in an array in RAM. Provides no persistence support.

    Plugin alias: ``memory``
    c                    s   t t| ƒ ¡  g | _i | _d S ©N)Úsuperr   Ú__init__Ú_jobsÚ_jobs_index©Úself©Ú	__class__© úR/var/www/html/bot/env/lib/python3.10/site-packages/apscheduler/jobstores/memory.pyr
      s   
zMemoryJobStore.__init__c                 C   s   | j  |d¡d S )N©NNr   )r   Úget)r   Újob_idr   r   r   Ú
lookup_job   s   zMemoryJobStore.lookup_jobc                 C   s@   t |ƒ}g }| jD ]\}}|d u s||kr |S | |¡ q	|S r   )r   r   Úappend)r   ÚnowÚnow_timestampÚpendingÚjobÚ	timestampr   r   r   Úget_due_jobs   s   þzMemoryJobStore.get_due_jobsc                 C   s   | j r| j d d jS d S )Nr   )r   Únext_run_timer   r   r   r   Úget_next_run_time!   s   z MemoryJobStore.get_next_run_timec                 C   s   dd„ | j D ƒS )Nc                 S   s   g | ]}|d  ‘qS )r   r   )Ú.0Újr   r   r   Ú
<listcomp>%   s    z/MemoryJobStore.get_all_jobs.<locals>.<listcomp>)r   r   r   r   r   Úget_all_jobs$   s   zMemoryJobStore.get_all_jobsc                 C   sT   |j | jv rt|j ƒ‚t|jƒ}|  ||j ¡}| j |||f¡ ||f| j|j < d S r   )Úidr   r   r   r   Ú_get_job_indexr   Úinsert)r   r   r   Úindexr   r   r   Úadd_job'   s   

zMemoryJobStore.add_jobc                 C   s’   | j  |jd¡\}}|d u rt|jƒ‚|  ||j¡}t|jƒ}||kr+||f| j|< n| j|= |  ||j¡}| j |||f¡ ||f| j |j< d S ©Nr   )	r   r   r$   r   r%   r   r   r   r&   )r   r   Úold_jobÚold_timestampÚ	old_indexÚnew_timestampÚ	new_indexr   r   r   Ú
update_job0   s   

zMemoryJobStore.update_jobc                 C   sD   | j  |d¡\}}|d u rt|ƒ‚|  ||¡}| j|= | j |j= d S r)   )r   r   r   r%   r   r$   )r   r   r   r   r'   r   r   r   Ú
remove_jobB   s   zMemoryJobStore.remove_jobc                 C   s   g | _ i | _d S r   )r   r   r   r   r   r   Úremove_all_jobsK   s   
zMemoryJobStore.remove_all_jobsc                 C   s   |   ¡  d S r   )r1   r   r   r   r   ÚshutdownO   s   zMemoryJobStore.shutdownc                 C   s®   dt | jƒ}}|du rtdƒn|}||k rU|| d }| j| \}}|du r+tdƒn|}||kr4|}n||k r=|d }n|j|krE|}n|j|k rO|d }n|S ||k s|S )zÕ
        Returns the index of the given job, or if it's not found, the index where the job should be
        inserted based on the given timestamp.

        :type timestamp: int
        :type job_id: str

        r   NÚinfé   é   )Úlenr   Úfloatr$   )r   r   r   ÚloÚhiÚmidÚmid_jobÚmid_timestampr   r   r   r%   R   s"   	



ózMemoryJobStore._get_job_index)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r#   r(   r/   r0   r1   r2   r%   Ú__classcell__r   r   r   r   r      s    
		r   N)	Ú
__future__r   Úapscheduler.jobstores.baser   r   r   Úapscheduler.utilr   r   r   r   r   r   Ú<module>   s    