def schedule_job(date, callable_name, content_object=None, expires='7d', args=(), kwargs={}): """Schedule a job. `date` may be a datetime.datetime or a datetime.timedelta. The callable to be executed may be specified in two ways: - set `callable_name` to an identifier ('mypackage.myapp.some_function'). - specify an instance of a model as content_object and set `callable_name` to a method name ('do_job') The scheduler will not attempt to run the job if its expiration date has passed. """ # TODO: allow to pass in a real callable, but check that it's a global assert callable_name and isinstance(callable_name, str), callable_name if isinstance(date, basestring): date = parse_timedelta(date) if isinstance(date, datetime.timedelta): date = datetime.datetime.now() + date job = ScheduledJob(callable_name=callable_name, time_slot_start=date) if expires: if isinstance(expires, basestring): expires = parse_timedelta(expires) if isinstance(expires, datetime.timedelta): expires = date + expires job.time_slot_end = expires if content_object: job.content_object = content_object job.args = args job.kwargs = kwargs job.save() return job
def reschedule(self, date, callable_name=None, content_object=None, expires='7d', args=None, kwargs=None): """Schedule a clone of this job.""" # Resolve date relative to the expected start of the current job. if isinstance(date, basestring): date = parse_timedelta(date) if isinstance(date, datetime.timedelta): date = self.time_slot_start + date if callable_name is None: callable_name = self.callable_name if content_object is None: content_object = self.content_object if args is None: args = self.args or [] if kwargs is None: kwargs = self.kwargs or {} from django_future import schedule_job return schedule_job(date, callable_name, content_object=content_object, expires=expires, args=args, kwargs=kwargs)
def schedule_job(date, callable_name, content_object=None, expires='7d', args=(), kwargs={}): """ Schedule a job. `date` may be a datetime.datetime or a datetime.timedelta. The callable to be executed may be specified in two ways: - set `callable_name` to an identifier ('mypackage.myapp.some_function'). - specify an instance of a model as content_object and set `callable_name` to a method name ('do_job') The scheduler will not attempt to run the job if its expiration date has passed. """ # TODO: allow to pass in a real callable, but check that it's a global assert callable_name \ and isinstance(callable_name, str), callable_name if isinstance(date, str): date = parse_timedelta(date) if isinstance(date, datetime.timedelta): date = timezone.now() + date job = ScheduledJob(callable_name=callable_name, time_slot_start=date) if expires: if isinstance(expires, str): expires = parse_timedelta(expires) if isinstance(expires, datetime.timedelta): expires = date + expires job.time_slot_end = expires if content_object: job.content_object = content_object job.args = args job.kwargs = kwargs job.save() return job
def reschedule(self, date, callable_name=None, content_object=None, expires='7d', args=None, kwargs=None): """Schedule a clone of this job.""" # Resolve date relative to the expected start of the current job. if isinstance(date, basestring): date = parse_timedelta(date) if isinstance(date, datetime.timedelta): date = self.time_slot_start + date if callable_name is None: callable_name = self.callable_name if content_object is None: content_object = self.content_object if args is None: args = self.args if kwargs is None: kwargs = self.kwargs from django_future import schedule_job return schedule_job(date, callable_name, content_object=content_object, expires=expires, args=args, kwargs=kwargs)
def test_parse_timedelta(self): self.assertEqual(timedelta(minutes=60), parse_timedelta("60m")) self.assertEqual(timedelta(hours=24), parse_timedelta("24h")) self.assertEqual(timedelta(days=7), parse_timedelta("7d")) self.assertEqual(timedelta(weeks=52), parse_timedelta("52w"))