
    iG                     N    d dl mZ d dlmZmZmZ d dlmZ  G d de          ZdS )    )absolute_import)BaseJobStoreJobLookupErrorConflictingIdError)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                 r    t          t          |                                            g | _        i | _        d S N)superr	   __init___jobs_jobs_index)self	__class__s    l/var/www/html/crypto-mining-system/backend/venv/lib/python3.11/site-packages/apscheduler/jobstores/memory.pyr   zMemoryJobStore.__init__   s4    nd##,,...
    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_job0   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 r3   )r   r   r   r.   r   r-   )r   r   r   r   r0   s        r   
remove_jobzMemoryJobStore.remove_jobB   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_jobsK   s    
r   c                 .    |                                   d S r   )r=   r#   s    r   shutdownzMemoryJobStore.shutdownO   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_indexR   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+   r1   r9   r;   r=   r?   r.   __classcell__)r   s   @r   r	   r	      s             = = =  F F F* * *4 4 4< < <$% % %          r   r	   N)	
__future__r   apscheduler.jobstores.baser   r   r   apscheduler.utilr   r	   r'   r   r   <module>rS      s    & & & & & & 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   