mirror of
https://github.com/django/django.git
synced 2025-06-05 11:39:13 +00:00
Remove option to use run_after
with timedelta
Managing when it applies and which timezone can be quite complex.
This commit is contained in:
parent
70ee78741e
commit
b98708fd33
@ -1,12 +1,11 @@
|
|||||||
from dataclasses import dataclass, field, replace
|
from dataclasses import dataclass, field, replace
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime
|
||||||
from inspect import iscoroutinefunction
|
from inspect import iscoroutinefunction
|
||||||
from typing import Any, Callable, Dict, Optional, Type
|
from typing import Any, Callable, Dict, Optional, Type
|
||||||
|
|
||||||
from asgiref.sync import async_to_sync, sync_to_async
|
from asgiref.sync import async_to_sync, sync_to_async
|
||||||
|
|
||||||
from django.db.models.enums import TextChoices
|
from django.db.models.enums import TextChoices
|
||||||
from django.utils import timezone
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .exceptions import ResultDoesNotExist
|
from .exceptions import ResultDoesNotExist
|
||||||
@ -88,10 +87,7 @@ class Task:
|
|||||||
if queue_name is not None:
|
if queue_name is not None:
|
||||||
changes["queue_name"] = queue_name
|
changes["queue_name"] = queue_name
|
||||||
if run_after is not None:
|
if run_after is not None:
|
||||||
if isinstance(run_after, timedelta):
|
changes["run_after"] = run_after
|
||||||
changes["run_after"] = timezone.now() + run_after
|
|
||||||
else:
|
|
||||||
changes["run_after"] = run_after
|
|
||||||
if backend is not None:
|
if backend is not None:
|
||||||
changes["backend"] = backend
|
changes["backend"] = backend
|
||||||
|
|
||||||
|
@ -85,10 +85,6 @@ Attributes of ``Task`` cannot be modified.
|
|||||||
* :attr:`queue_name <Task.queue_name>`
|
* :attr:`queue_name <Task.queue_name>`
|
||||||
* :attr:`run_after <Task.run_after>`
|
* :attr:`run_after <Task.run_after>`
|
||||||
|
|
||||||
``run_after`` may also be provided as a :class:`timedelta <datetime.timedelta>`,
|
|
||||||
which is used relative to the current time (when ``using`` is called), or a
|
|
||||||
timezone-aware :class:`datetime <datetime.datetime>`.
|
|
||||||
|
|
||||||
.. method:: Task.enqueue(*args, **kwargs)
|
.. method:: Task.enqueue(*args, **kwargs)
|
||||||
|
|
||||||
Enqueue the task for later execution.
|
Enqueue the task for later execution.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import dataclasses
|
import dataclasses
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime
|
||||||
|
|
||||||
from django.tasks import (
|
from django.tasks import (
|
||||||
DEFAULT_QUEUE_NAME,
|
DEFAULT_QUEUE_NAME,
|
||||||
@ -97,10 +97,6 @@ class TaskTestCase(SimpleTestCase):
|
|||||||
|
|
||||||
self.assertIsNone(test_tasks.noop_task.run_after)
|
self.assertIsNone(test_tasks.noop_task.run_after)
|
||||||
self.assertEqual(test_tasks.noop_task.using(run_after=now).run_after, now)
|
self.assertEqual(test_tasks.noop_task.using(run_after=now).run_after, now)
|
||||||
self.assertIsInstance(
|
|
||||||
test_tasks.noop_task.using(run_after=timedelta(hours=1)).run_after,
|
|
||||||
datetime,
|
|
||||||
)
|
|
||||||
self.assertIsNone(test_tasks.noop_task.run_after)
|
self.assertIsNone(test_tasks.noop_task.run_after)
|
||||||
|
|
||||||
def test_using_unknown_backend(self):
|
def test_using_unknown_backend(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user