
    i                     B    d dl mZmZmZ d dlmZ  G d de          ZdS )    )BaseJobStoreConflictingIdErrorJobLookupError)datetime_to_utc_timestampc                   ^     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Z xZS )MemoryJobStorezh
    Stores jobs in an array in RAM. Provides no persistence support.

    Plugin alias: ``memory``
    c                 d    t                                                       g | _        i | _        d S N)super__init___jobs_jobs_index)self	__class__s    c/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/apscheduler/jobstores/memory.pyr   zMemoryJobStore.__init__   s.    
    c                 D    | j                             |d          d         S )NNNr   )r   get)r   job_ids     r   
lookup_jobzMemoryJobStore.lookup_job   s     ##FL99!<<r   c                     t          |          }g }| j        D ]$\  }}|||k    r n|                    |           %|S r
   )r   r   append)r   nownow_timestamppendingjob	timestamps         r   get_due_jobszMemoryJobStore.get_due_jobs   sX    1#66"j 	  	 NC I$=$=NN3r   c                 D    | j         r| j         d         d         j        nd S )Nr   )r   next_run_timer   s    r   get_next_run_timez MemoryJobStore.get_next_run_time   s"    15Etz!}Q--Er   c                 $    d | j         D             S )Nc                     g | ]
}|d          S )r    ).0js     r   
<listcomp>z/MemoryJobStore.get_all_jobs.<locals>.<listcomp>#   s    )))!)))r   )r   r"   s    r   get_all_jobszMemoryJobStore.get_all_jobs"   s    ))dj))))r   c                    |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   indexs       r   add_jobzMemoryJobStore.add_job%   s    6T%%%$SV,,,-c.?@@	##Isv66
%#y!1222$'#3   r   c                    | j                             |j        d          \  }}|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_indexs          r   
update_jobzMemoryJobStore.update_job.   s    !%!1!5!5cfl!K!K? ((( ''wzBB	1#2CDDM))%(-$8DJy!!
9%++M36BBIJi#})=>>>(+]';$$$r   c                     | j                             |d          \  }}|t          |          |                     ||          }| j        |= | j         |j        = d S r2   )r   r   r   r-   r   r,   )r   r   r   r   r/   s        r   
remove_jobzMemoryJobStore.remove_job@   sc    )--flCCY; (((##Iv66JuSV$$$r   c                 "    g | _         i | _        d S r
   )r   r   r"   s    r   remove_all_jobszMemoryJobStore.remove_all_jobsI   s    
r   c                 .    |                                   d S r
   )r<   r"   s    r   shutdownzMemoryJobStore.shutdownM   s    r   c                 2   dt          | j                  }}|t          d          n|}||k     rg||z   dz  }| j        |         \  }}|t          d          n|}||k    r|}n-||k     r|dz   }n!|j        |k    r|}n|j        |k     r|dz   }n|S ||k     g|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_timestamps           r   r-   zMemoryJobStore._get_job_indexP   s     C
OOB$-$5E%LLL9	2gg7q.C%)Z_"G],9,AE%LLL}My((**1Wf$$f$$1W
 2gg 	r   )__name__
__module____qualname____doc__r   r   r   r#   r*   r0   r8   r:   r<   r>   r-   __classcell__)r   s   @r   r   r      s             = = =  F F F* * *4 4 4< < <$% % %          r   r   N)apscheduler.jobstores.baser   r   r   apscheduler.utilr   r   r&   r   r   <module>rQ      ss    W W W W W W W W W W 6 6 6 6 6 6e e e e e\ e e e e er   