Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
 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"))