o
    _J@h  ã                   @   s4   d dl mZmZmZ d dlmZ G dd„ deƒZdS )é    )ÚBaseJobStoreÚConflictingIdErrorÚJobLookupError)Ú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 ƒ  ¡  g | _i | _d S ©N)ÚsuperÚ__init__Ú_jobsÚ_jobs_index©Úself©Ú	__class__© úO/var/www/html/venv/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   ÚnowZ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   Zold_jobZold_timestampZ	old_indexZnew_timestampZ	new_indexr   r   r   Ú
update_job.   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_job@   s   zMemoryJobStore.remove_jobc                 C   s   g | _ i | _d S r   )r
   r   r   r   r   r   Úremove_all_jobsI   s   
zMemoryJobStore.remove_all_jobsc                 C   s   |   ¡  d S r   )r*   r   r   r   r   ÚshutdownM   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ÚmidZmid_jobZmid_timestampr   r   r   r#   P   s"   	



ózMemoryJobStore._get_job_index)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r   r!   r&   r(   r)   r*   r+   r#   Ú__classcell__r   r   r   r   r      s    
		r   N)Zapscheduler.jobstores.baser   r   r   Zapscheduler.utilr   r   r   r   r   r   Ú<module>   s    