You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.7 KiB
45 lines
1.7 KiB
4 years ago
|
import six
|
||
|
from apscheduler.job import Job
|
||
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||
|
from apscheduler.schedulers.base import STATE_STOPPED
|
||
|
from apscheduler.util import undefined
|
||
|
|
||
|
|
||
|
class RedJob(Job):
|
||
|
pass
|
||
|
|
||
|
|
||
|
class RedAsyncIOScheduler(AsyncIOScheduler):
|
||
|
|
||
|
def add_job(self, func, trigger=None, args=None, kwargs=None, id=None, name=None,
|
||
|
misfire_grace_time=undefined, coalesce=undefined, max_instances=undefined,
|
||
|
next_run_time=undefined, jobstore='default', executor='default',
|
||
|
replace_existing=False, **trigger_args):
|
||
|
job_kwargs = {
|
||
|
'trigger': self._create_trigger(trigger, trigger_args),
|
||
|
'executor': executor,
|
||
|
'func': func,
|
||
|
'args': tuple(args) if args is not None else (),
|
||
|
'kwargs': dict(kwargs) if kwargs is not None else {},
|
||
|
'id': id,
|
||
|
'name': name,
|
||
|
'misfire_grace_time': misfire_grace_time,
|
||
|
'coalesce': coalesce,
|
||
|
'max_instances': max_instances,
|
||
|
'next_run_time': next_run_time
|
||
|
}
|
||
|
job_kwargs = dict((key, value) for key, value in six.iteritems(job_kwargs) if
|
||
|
value is not undefined)
|
||
|
job = RedJob(self, **job_kwargs)
|
||
|
|
||
|
# Don't really add jobs to job stores before the scheduler is up and running
|
||
|
with self._jobstores_lock:
|
||
|
if self.state == STATE_STOPPED:
|
||
|
self._pending_jobs.append((job, jobstore, replace_existing))
|
||
|
self._logger.info('Adding job tentatively -- it will be properly scheduled when '
|
||
|
'the scheduler starts')
|
||
|
else:
|
||
|
self._real_add_job(job, jobstore, replace_existing)
|
||
|
|
||
|
return job
|