45 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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
 | 
