diff --git a/django_q/tasks.py b/django_q/tasks.py index f952f3d..069294c 100644 --- a/django_q/tasks.py +++ b/django_q/tasks.py @@ -54,6 +54,7 @@ def schedule(func, *args, **kwargs): """ :param func: function to schedule :param args: function arguments + :param name: optional name for the schedule :param hook: optional result hook function :type schedule_type: Schedule.TYPE :param repeats: how many times to repeat. 0=never, -1=always @@ -64,12 +65,14 @@ def schedule(func, *args, **kwargs): :rtype: Schedule """ + name = kwargs.pop('name', None) hook = kwargs.pop('hook', None) schedule_type = kwargs.pop('schedule_type', Schedule.ONCE) repeats = kwargs.pop('repeats', -1) next_run = kwargs.pop('next_run', timezone.now()) - return Schedule.objects.create(func=func, + return Schedule.objects.create(name=name, + func=func, hook=hook, args=args, kwargs=kwargs, diff --git a/django_q/tests/test_scheduler.py b/django_q/tests/test_scheduler.py index c6860d1..8fc3505 100644 --- a/django_q/tests/test_scheduler.py +++ b/django_q/tests/test_scheduler.py @@ -20,6 +20,7 @@ def test_scheduler(r): r.delete(list_key) schedule = create_schedule('math.copysign', 1, -1, + name='test math', hook='django_q.tests.tasks.result', schedule_type=Schedule.HOURLY, repeats=1) diff --git a/docs/admin.rst b/docs/admin.rst index f1c3fd4..b4c57a4 100644 --- a/docs/admin.rst +++ b/docs/admin.rst @@ -11,7 +11,8 @@ Successful tasks ---------------- Shows all successfully executed tasks. Meaning they did not encounter any errors during execution. -From here you can look at details of each task or delete them. +From here you can look at details of each task or delete them. Use the group column to sort your results by schedule name or group id. +The table is searchable by `name`, `func` and `group` Uses the :class:`Success` proxy model. diff --git a/docs/schedules.rst b/docs/schedules.rst index a5dbe2a..c726e0d 100644 --- a/docs/schedules.rst +++ b/docs/schedules.rst @@ -48,12 +48,13 @@ If you want to schedule regular Django management commands, you can use the :mod Reference --------- -.. py:function:: schedule(func, *args, hook=None, schedule_type='O', repeats=-1, next_run=now() , **kwargs) +.. py:function:: schedule(func, *args, name=None, hook=None, schedule_type='O', repeats=-1, next_run=now() , **kwargs) Creates a schedule - :param str name: A sensible name for your schedule + :param str func: the function to schedule. Dotted strings only. :param args: arguments for the scheduled function. + :param str name: An optional name for your schedule. :param str hook: optional result hook function. Dotted strings only. :param str schedule_type: (O)nce, (H)ourly, (D)aily, (W)eekly, (M)onthly, (Q)uarterly, (Y)early or :attr:`Schedule.TYPE` :param int repeats: Number of times to repeat schedule. -1=Always, 0=Never, n =n. @@ -70,7 +71,7 @@ Reference .. py:attribute:: name - A name for your schedule. Tasks created by this schedule will assume this as their group id. + A name for your schedule. Tasks created by this schedule will assume this or the primary key as their group id. .. py:attribute:: func diff --git a/docs/tasks.rst b/docs/tasks.rst index bff8ef7..862be40 100644 --- a/docs/tasks.rst +++ b/docs/tasks.rst @@ -54,7 +54,7 @@ Take care that you haven't limited your results database too much and that the g Instead of :func:`result_group` you can also use :func:`fetch_group` to return a list of :class:`Task` objects. .. note:: - Tasks created by a schedule, will use the schedules name as their group id. + Tasks created by a schedule, will use the schedule name as their group id. This enables you to browse the schedule's history. Synchronous testing -------------------