o
    iv                  
   @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 zd dl
mZ W n ey7 Z zededZ[ww d	d
 ZG dd deZdS )    )	timedeltawraps)SchedulerNotRunningError)BaseScheduler)	maybe_ref)IOLoopz+TornadoScheduler requires tornado installedNc                    s   t   fdd}|S )Nc                    s.   | j d u rt| j j | g|R i | d S N)_ioloopr   Zadd_callback)selfargskwargsfunc U/home/app/Keep/.python/lib/python3.10/site-packages/apscheduler/schedulers/tornado.pywrapper   s   
 zrun_in_ioloop.<locals>.wrapperr   )r   r   r   r   r   run_in_ioloop   s   r   c                       sh   e Zd ZdZdZdZed fdd	ZdddZ fdd	Z	d
d Z
dd Zdd Zedd Z  ZS )TornadoSchedulerax  
    A scheduler that runs on a Tornado IOLoop.

    The default executor can run jobs based on native coroutines (``async def``).

    =========== ===============================================================
    ``io_loop`` Tornado IOLoop instance to use (defaults to the global IO loop)
    =========== ===============================================================
    NTc                    s   t  | |   d S r	   )supershutdown_stop_timerr   wait	__class__r   r   	_shutdown'   s   zTornadoScheduler._shutdownc                 C   s   | j st| | d S r	   )runningr   r   r   r   r   r   r   ,   s   zTornadoScheduler.shutdownc                    s*   t |dd pt | _t | d S )NZio_loop)r   popr   currentr
   r   
_configure)r   configr   r   r   r    2   s   zTornadoScheduler._configurec                 C   s0   |    |d ur| jt|d| j| _d S d S )N)seconds)r   r
   Zadd_timeoutr   wakeup_timeoutr   Zwait_secondsr   r   r   _start_timer6   s   
zTornadoScheduler._start_timerc                 C   s    | j r| j| j  | ` d S d S r	   )r$   r
   Zremove_timeout)r   r   r   r   r   =   s   zTornadoScheduler._stop_timerc                 C   s   ddl m} | S )Nr   )TornadoExecutor)Zapscheduler.executors.tornador'   )r   r'   r   r   r   _create_default_executorB   s   z)TornadoScheduler._create_default_executorc                 C   s   |    |  }| | d S r	   )r   Z_process_jobsr&   r%   r   r   r   r#   G   s   zTornadoScheduler.wakeup)T)__name__
__module____qualname____doc__r
   r$   r   r   r   r    r&   r   r(   r#   __classcell__r   r   r   r   r      s    

r   )datetimer   	functoolsr   Zapscheduler.schedulersr   Zapscheduler.schedulers.baser   Zapscheduler.utilr   Ztornado.ioloopr   ImportErrorexcr   r   r   r   r   r   <module>   s    
