Python celery.schedules.schedule() Examples
The following are 30
code examples of celery.schedules.schedule().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
celery.schedules
, or try the search function
.
Example #1
Source File: test_periodic_task.py From MozDef with Mozilla Public License 2.0 | 6 votes |
def test_parsing_dict(self): task = PeriodicTask(**self.task_dict) assert task.name == 'bruteforce_ssh.AlertBruteforceSsh' assert task.task == 'bruteforce_ssh.AlertBruteforceSsh' assert isinstance(task._id, str) assert task.args == [] assert task.kwargs == {} assert task.enabled is True assert task.queue is None assert task.exchange is None assert task.routing_key is None assert task.last_run_at is None assert task.run_immediately is False assert task.total_run_count is 0 assert task.schedule_type == 'interval' assert task.schedule_str == '1.0 seconds' assert isinstance(task.celery_schedule, Interval) is True assert isinstance(task.schedule, celery_sched) is True
Example #2
Source File: sqlalchemy_scheduler.py From celery_sqlalchemy_scheduler with MIT License | 6 votes |
def from_entry(cls, name, skip_fields=('relative', 'options'), **entry): options = entry.get('options') or {} fields = dict(entry) for skip_field in skip_fields: fields.pop(skip_field, None) schedule = fields.pop('schedule') model_schedule, model_field = cls.to_model_schedule(schedule) fields[model_field] = model_schedule fields['args'] = fields.get('args') or [] fields['kwargs'] = fields.get('kwargs') or {} fields['queue'] = options.get('queue') fields['exchange'] = options.get('exchange') fields['routing_key'] = options.get('routing_key') query = dbsession.query(DatabaseSchedulerEntry) query = query.filter_by(name=name) db_entry = query.first() if db_entry is None: new_entry = DatabaseSchedulerEntry(**fields) new_entry.name = name dbsession.add(new_entry) dbsession.commit() db_entry = new_entry return cls(db_entry)
Example #3
Source File: models.py From celery-sqlalchemy-scheduler with MIT License | 6 votes |
def from_schedule(cls, session, schedule): spec = { 'minute': schedule._orig_minute, 'hour': schedule._orig_hour, 'day_of_week': schedule._orig_day_of_week, 'day_of_month': schedule._orig_day_of_month, 'month_of_year': schedule._orig_month_of_year, } if schedule.tz: spec.update({ 'timezone': schedule.tz.zone }) model = session.query(CrontabSchedule).filter_by(**spec).first() if not model: model = cls(**spec) session.add(model) session.commit() return model
Example #4
Source File: sqlalchemy_scheduler_models.py From celery_sqlalchemy_scheduler with MIT License | 6 votes |
def from_schedule(cls, dbsession, schedule): spec = {'minute': schedule._orig_minute, 'hour': schedule._orig_hour, 'day_of_week': schedule._orig_day_of_week, 'day_of_month': schedule._orig_day_of_month, 'month_of_year': schedule._orig_month_of_year} try: query = dbsession.query(CrontabSchedule) query = query.filter_by(**spec) existing = query.one() return existing except NoResultFound: return cls(**spec) except MultipleResultsFound: query = dbsession.query(CrontabSchedule) query = query.filter_by(**spec) query.delete() dbsession.commit() return cls(**spec)
Example #5
Source File: schedulers.py From celery-sqlalchemy-scheduler with MIT License | 6 votes |
def _unpack_fields(cls, session, schedule, args=None, kwargs=None, relative=None, options=None, **entry): """ **entry sample: {'task': 'celery.backend_cleanup', 'schedule': <crontab: 0 4 * * * (m/h/d/dM/MY)>, 'options': {'expires': 43200}} """ model_schedule, model_field = cls.to_model_schedule(session, schedule) entry.update( # the model_id which to relationship {model_field + '_id': model_schedule.id}, args=dumps(args or []), kwargs=dumps(kwargs or {}), **cls._unpack_options(**options or {}) ) return entry
Example #6
Source File: schedulers.py From celery-sqlalchemy-scheduler with MIT License | 6 votes |
def all_as_schedule(self): # TODO: session = self.Session() with session_cleanup(session): logger.debug('DatabaseScheduler: Fetching database schedule') # get all enabled PeriodicTask models = session.query(self.Model).filter_by(enabled=True).all() s = {} for model in models: try: s[model.name] = self.Entry(model, app=self.app, Session=self.Session, session=session) except ValueError: pass return s
Example #7
Source File: schedulers.py From celery-sqlalchemy-scheduler with MIT License | 6 votes |
def sync(self): """override""" logger.info('Writing entries...') _tried = set() _failed = set() try: while self._dirty: name = self._dirty.pop() try: self.schedule[name].save() # save to database logger.debug( '{name} save to database'.format(name=name)) _tried.add(name) except (KeyError) as exc: logger.error(exc) _failed.add(name) except sqlalchemy.exc.IntegrityError as exc: logger.exception('Database error while sync: %r', exc) except Exception as exc: logger.exception(exc) finally: # retry later, only for the failed ones self._dirty |= _failed
Example #8
Source File: schedulers.py From celery-sqlalchemy-scheduler with MIT License | 6 votes |
def schedule(self): initial = update = False if self._initial_read: logger.debug('DatabaseScheduler: initial read') initial = update = True self._initial_read = False elif self.schedule_changed(): # when you updated the `PeriodicTasks` model's `last_update` field logger.info('DatabaseScheduler: Schedule changed.') update = True if update: self.sync() self._schedule = self.all_as_schedule() # the schedule changed, invalidate the heap in Scheduler.tick if not initial: self._heap = [] self._heap_invalidated = True if logger.isEnabledFor(logging.DEBUG): logger.debug('Current schedule:\n%s', '\n'.join( repr(entry) for entry in values(self._schedule)), ) # logger.debug(self._schedule) return self._schedule
Example #9
Source File: test_serializer.py From celery-beatx with MIT License | 6 votes |
def test_serialize_entry_json_serializable(dt): entry = ScheduleEntry( name='entry-1', task='entry-1-task', schedule=dt, args=('arg1', 'arg2'), kwargs={'key1': 'val1', 'key2': 'val2'}, last_run_at=datetime.now(), total_run_count=1, options={}, ) obj = serialize_entry(entry) try: json.dumps(obj) except Exception as e: pytest.fail(e)
Example #10
Source File: serializer.py From celery-beatx with MIT License | 6 votes |
def deserialize_entry(entry): """ Deserialize ScheduleEntry from dictionary. Helps deserialize entry from json, yml and any other formats. :param entry: :return: """ return ScheduleEntry( name=entry['name'], task=entry['task'], schedule=decode_schedule(entry['schedule']), args=entry['args'], kwargs=entry['kwargs'], last_run_at=decode_datetime(entry['last_run_at']), total_run_count=entry['total_run_count'], options=entry['options'], )
Example #11
Source File: schedulers.py From gitlab-tools with GNU General Public License v3.0 | 6 votes |
def from_entry(cls, name, session, skip_fields=('relative', 'options'), **entry): """ PeriodicTask :param session: :param name: :param skip_fields: :param entry: :return: """ fields = dict(entry) for skip_field in skip_fields: fields.pop(skip_field, None) schedule = fields.pop('schedule') model_schedule, model_field = cls.to_model_schedule(schedule, session) fields[model_field] = model_schedule fields['args'] = json.dumps(fields.get('args') or []) fields['kwargs'] = json.dumps(fields.get('kwargs') or {}) model, _ = PeriodicTask.update_or_create(session, name=name, defaults=fields) cls.save_model(session, model) return cls(model)
Example #12
Source File: serializer.py From celery-beatx with MIT License | 6 votes |
def serialize_entry(entry): """ Serialize ScheduleEntry to json-valid dictionary. Helps serialize entry to json, yml and any other formats. :param entry: ScheduleEntry :return: json-valid dictionary """ return { 'name': entry.name, 'task': entry.task, 'schedule': encode_schedule(entry.schedule), 'args': entry.args, 'kwargs': entry.kwargs, 'last_run_at': encode_datetime(entry.last_run_at), 'total_run_count': entry.total_run_count, 'options': entry.options }
Example #13
Source File: models.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def schedule(self): if self.interval: return self.interval.schedule elif self.crontab: return self.crontab.schedule elif self.solar: return self.solar.schedule raise ValueError('{} schedule is None!'.format(self.name))
Example #14
Source File: sqlalchemy_scheduler.py From celery_sqlalchemy_scheduler with MIT License | 5 votes |
def update_from_dict(self, dict_): s = {} for name, entry in dict_.items(): try: s[name] = self.Entry.from_entry(name, **entry) except Exception as exc: self.logger.exception('update_from_dict') self.schedule.update(s)
Example #15
Source File: sqlalchemy_scheduler.py From celery_sqlalchemy_scheduler with MIT License | 5 votes |
def setup_schedule(self): self.install_default_entries(self.schedule) self.update_from_dict(self.app.conf.CELERYBEAT_SCHEDULE)
Example #16
Source File: models.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def schedule(self): return schedules.schedule( dt.timedelta(**{self.period: self.every}), # nowfun=lambda: make_aware(now()) # nowfun=dt.datetime.now )
Example #17
Source File: models.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def from_schedule(cls, session, schedule, period=SECONDS): every = max(schedule.run_every.total_seconds(), 0) model = session.query(IntervalSchedule).filter_by( every=every, period=period).first() if not model: model = cls(every=every, period=period) session.add(model) session.commit() return model
Example #18
Source File: models.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def schedule(self): return TzAwareCrontab( minute=self.minute, hour=self.hour, day_of_week=self.day_of_week, day_of_month=self.day_of_month, month_of_year=self.month_of_year, tz=pytz.timezone(self.timezone) )
Example #19
Source File: models.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def schedule(self): return schedules.solar( self.event, self.latitude, self.longitude, nowfun=dt.datetime.now )
Example #20
Source File: models.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def __repr__(self): fmt = '{0.name}: {{no schedule}}' if self.interval: fmt = '{0.name}: {0.interval}' elif self.crontab: fmt = '{0.name}: {0.crontab}' elif self.solar: fmt = '{0.name}: {0.solar}' return fmt.format(self)
Example #21
Source File: schedulers.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def is_due(self): if not self.model.enabled: # 5 second delay for re-enable. return schedules.schedstate(False, 5.0) # START DATE: only run after the `start_time`, if one exists. if self.model.start_time is not None: now = maybe_make_aware(self._default_now()) start_time = self.model.start_time.replace( tzinfo=self.app.timezone) if now < start_time: # The datetime is before the start date - don't run. _, delay = self.schedule.is_due(self.last_run_at) # use original delay for re-check return schedules.schedstate(False, delay) # ONE OFF TASK: Disable one off tasks after they've ran once if self.model.one_off and self.model.enabled \ and self.model.total_run_count > 0: self.model.enabled = False # disable self.model.total_run_count = 0 # Reset self.model.no_changes = False # Mark the model entry as changed save_fields = ('enabled',) # the additional fields to save self.save(save_fields) return schedules.schedstate(False, None) # Don't recheck return self.schedule.is_due(self.last_run_at)
Example #22
Source File: schedulers.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def to_model_schedule(cls, session, schedule): for schedule_type, model_type, model_field in cls.model_schedules: # change to schedule schedule = schedules.maybe_schedule(schedule) if isinstance(schedule, schedule_type): # TODO: model_schedule = model_type.from_schedule(session, schedule) return model_schedule, model_field raise ValueError( 'Cannot convert schedule type {0!r} to model'.format(schedule))
Example #23
Source File: test_serializer.py From celery-beatx with MIT License | 5 votes |
def test_serialize_deserialize_entry(dt): entry = ScheduleEntry( name='entry-1', task='entry-1-task', schedule=dt, args=('arg1', 'arg2'), kwargs={'key1': 'val1', 'key2': 'val2'}, last_run_at=datetime.now(), total_run_count=1, options={}, ) decoded_entry = deserialize_entry(serialize_entry(entry)) assert decoded_entry.__reduce__() == entry.__reduce__()
Example #24
Source File: schedulers.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def __repr__(self): return '<ModelEntry: {0} {1}(*{2}, **{3}) {4}>'.format( safe_str(self.name), self.task, safe_repr(self.args), safe_repr(self.kwargs), self.schedule, )
Example #25
Source File: schedulers.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def setup_schedule(self): """override""" logger.info('setup_schedule') self.install_default_entries(self.schedule) self.update_from_dict(self.app.conf.beat_schedule)
Example #26
Source File: schedulers.py From celery-sqlalchemy-scheduler with MIT License | 5 votes |
def install_default_entries(self, data): entries = {} if self.app.conf.result_expires: entries.setdefault( 'celery.backend_cleanup', { 'task': 'celery.backend_cleanup', 'schedule': schedules.crontab('0', '4', '*'), 'options': {'expires': 12 * 3600}, }, ) self.update_from_dict(entries)
Example #27
Source File: schedulers.py From gitlab-tools with GNU General Public License v3.0 | 5 votes |
def install_default_entries(self, data): entries = {} if self.app.conf.CELERY_TASK_RESULT_EXPIRES: entries.setdefault( 'celery.backend_cleanup', { 'task': 'celery.backend_cleanup', 'schedule': schedules.crontab('*/5', '*', '*'), 'options': {'expires': 12 * 3600}, }, ) self.update_from_dict(entries)
Example #28
Source File: celery.py From gitlab-tools with GNU General Public License v3.0 | 5 votes |
def from_schedule(cls, session, schedule, period='seconds'): every = max(schedule.run_every.total_seconds(), 0) obj = cls.filter_by(session, every=every, period=period).first() if obj is None: return cls(every=every, period=period) else: return obj
Example #29
Source File: celery.py From gitlab-tools with GNU General Public License v3.0 | 5 votes |
def from_schedule(cls, session, schedule): spec = {'minute': schedule._orig_minute, 'hour': schedule._orig_hour, 'day_of_week': schedule._orig_day_of_week, 'day_of_month': schedule._orig_day_of_month, 'month_of_year': schedule._orig_month_of_year} obj = cls.filter_by(session, **spec).first() if obj is None: return cls(**spec) else: return obj
Example #30
Source File: celery.py From gitlab-tools with GNU General Public License v3.0 | 5 votes |
def schedule(self): if self.crontab: return self.crontab.schedule if self.interval: return self.interval.schedule