From 07125c35ff432849cb37eff36473e63c78ebb92c Mon Sep 17 00:00:00 2001 From: Jake Howard Date: Fri, 10 Oct 2025 17:05:05 +0100 Subject: [PATCH] Remove `enqueue_on_commit` functionality The behaviour is complex enough internally, but simple to do externally for those who need it. This matches the upstream position. If it comes back, it needs more thought. --- README.md | 20 ---- django_tasks/backends/base.py | 32 +----- django_tasks/backends/database/backend.py | 11 +- django_tasks/backends/dummy.py | 16 +-- django_tasks/backends/immediate.py | 7 +- django_tasks/backends/rq.py | 22 ++-- django_tasks/base.py | 10 -- tests/tasks.py | 10 -- tests/tests/test_custom_backend.py | 1 - tests/tests/test_database_backend.py | 67 ------------ tests/tests/test_dummy_backend.py | 121 ---------------------- tests/tests/test_immediate_backend.py | 87 ---------------- tests/tests/test_rq_backend.py | 65 ------------ tests/tests/test_tasks.py | 2 - 14 files changed, 14 insertions(+), 457 deletions(-) diff --git a/README.md b/README.md index 973d3d8..33c7afe 100644 --- a/README.md +++ b/README.md @@ -66,9 +66,6 @@ The task decorator accepts a few arguments to customize the task: - `priority`: The priority of the task (between -100 and 100. Larger numbers are higher priority. 0 by default) - `queue_name`: Whether to run the task on a specific queue - `backend`: Name of the backend for this task to use (as defined in `TASKS`) -- `enqueue_on_commit`: Whether the task is enqueued when the current transaction commits successfully, or enqueued immediately. By default, this is handled by the backend (see below). `enqueue_on_commit` may not be modified with `.using`. - -These attributes (besides `enqueue_on_commit`) can also be modified at run-time with `.using`: ```python modified_task = calculate_meaning_of_life.using(priority=10) @@ -108,23 +105,6 @@ The returned `TaskResult` can be interrogated to query the current state of the If the task takes arguments, these can be passed as-is to `enqueue`. -#### Transactions - -By default, tasks are enqueued after the current transaction (if there is one) commits successfully (using Django's `transaction.on_commit` method), rather than enqueueing immediately. - -This can be configured using the `ENQUEUE_ON_COMMIT` setting. `True` and `False` force the behaviour. - -```python -TASKS = { - "default": { - "BACKEND": "django_tasks.backends.immediate.ImmediateBackend", - "ENQUEUE_ON_COMMIT": False - } -} -``` - -This can also be configured per-task by passing `enqueue_on_commit` to the `task` decorator. - ### Queue names By default, tasks are enqueued onto the "default" queue. When using multiple queues, it can be useful to constrain the allowed names, so tasks aren't missed. diff --git a/django_tasks/backends/base.py b/django_tasks/backends/base.py index fb4ea21..a3c3813 100644 --- a/django_tasks/backends/base.py +++ b/django_tasks/backends/base.py @@ -6,7 +6,6 @@ from asgiref.sync import sync_to_async from django.conf import settings from django.core import checks -from django.db import connections from django.utils import timezone from django.utils.inspect import get_func_args from typing_extensions import ParamSpec @@ -27,7 +26,6 @@ class BaseTaskBackend(metaclass=ABCMeta): alias: str - enqueue_on_commit: bool task_class = Task @@ -48,21 +46,8 @@ def __init__(self, alias: str, params: dict) -> None: self.alias = alias self.queues = set(params.get("QUEUES", [DEFAULT_TASK_QUEUE_NAME])) - self.enqueue_on_commit = bool(params.get("ENQUEUE_ON_COMMIT", True)) self.options = params.get("OPTIONS", {}) - def _get_enqueue_on_commit_for_task(self, task: Task) -> bool: - """ - Determine the correct `enqueue_on_commit` setting to use for a given task. - """ - - # If the task defines it, use that, otherwise, fall back to the backend. - return ( - task.enqueue_on_commit - if task.enqueue_on_commit is not None - else self.enqueue_on_commit - ) - def validate_task(self, task: Task) -> None: """ Determine whether the provided Task can be executed by the backend. @@ -151,19 +136,4 @@ async def aget_result(self, result_id: str) -> TaskResult: ) def check(self, **kwargs: Any) -> Iterable[checks.CheckMessage]: - if self.enqueue_on_commit and not connections._settings: # type: ignore[attr-defined] - yield checks.Error( - "`ENQUEUE_ON_COMMIT` cannot be used when no databases are configured", - hint="Set ENQUEUE_ON_COMMIT to False", - id="tasks.E001", - ) - - if ( - self.enqueue_on_commit - and not connections["default"].features.supports_transactions - ): - yield checks.Error( - "ENQUEUE_ON_COMMIT cannot be used on a database which doesn't support transactions", - hint="Set ENQUEUE_ON_COMMIT to False", - id="tasks.E002", - ) + return [] diff --git a/django_tasks/backends/database/backend.py b/django_tasks/backends/database/backend.py index 4fb7a4f..acadfed 100644 --- a/django_tasks/backends/database/backend.py +++ b/django_tasks/backends/database/backend.py @@ -5,7 +5,6 @@ from django.apps import apps from django.core import checks from django.core.exceptions import ValidationError -from django.db import transaction from django.utils.version import PY311 from typing_extensions import ParamSpec @@ -61,14 +60,8 @@ def enqueue( db_result = self._task_to_db_task(task, args, kwargs) - def save_result() -> None: - db_result.save() - task_enqueued.send(type(self), task_result=db_result.task_result) - - if self._get_enqueue_on_commit_for_task(task): - transaction.on_commit(save_result) - else: - save_result() + db_result.save() + task_enqueued.send(type(self), task_result=db_result.task_result) return db_result.task_result diff --git a/django_tasks/backends/dummy.py b/django_tasks/backends/dummy.py index 4642447..6cf6730 100644 --- a/django_tasks/backends/dummy.py +++ b/django_tasks/backends/dummy.py @@ -1,8 +1,6 @@ from copy import deepcopy -from functools import partial from typing import TypeVar -from django.db import transaction from django.utils import timezone from typing_extensions import ParamSpec @@ -28,11 +26,6 @@ def __init__(self, alias: str, params: dict) -> None: self.results = [] - def _store_result(self, result: TaskResult) -> None: - object.__setattr__(result, "enqueued_at", timezone.now()) - self.results.append(result) - task_enqueued.send(type(self), task_result=result) - def enqueue( self, task: Task[P, T], @@ -45,7 +38,7 @@ def enqueue( task=task, id=get_random_id(), status=TaskResultStatus.READY, - enqueued_at=None, + enqueued_at=timezone.now(), started_at=None, last_attempted_at=None, finished_at=None, @@ -56,10 +49,9 @@ def enqueue( worker_ids=[], ) - if self._get_enqueue_on_commit_for_task(task) is not False: - transaction.on_commit(partial(self._store_result, result)) - else: - self._store_result(result) + self.results.append(result) + + task_enqueued.send(type(self), task_result=result) # Copy the task to prevent mutation issues return deepcopy(result) diff --git a/django_tasks/backends/immediate.py b/django_tasks/backends/immediate.py index 476b833..948793c 100644 --- a/django_tasks/backends/immediate.py +++ b/django_tasks/backends/immediate.py @@ -1,8 +1,6 @@ import logging -from functools import partial from typing import TypeVar -from django.db import transaction from django.utils import timezone from typing_extensions import ParamSpec @@ -110,9 +108,6 @@ def enqueue( worker_ids=[], ) - if self._get_enqueue_on_commit_for_task(task) is not False: - transaction.on_commit(partial(self._execute_task, task_result)) - else: - self._execute_task(task_result) + self._execute_task(task_result) return task_result diff --git a/django_tasks/backends/rq.py b/django_tasks/backends/rq.py index 840a8fb..de1d2f2 100644 --- a/django_tasks/backends/rq.py +++ b/django_tasks/backends/rq.py @@ -7,7 +7,6 @@ from django.apps import apps from django.core.checks import messages from django.core.exceptions import SuspiciousOperation -from django.db import transaction from django.utils.functional import cached_property from redis.client import Redis from rq.defaults import UNSERIALIZABLE_RETURN_VALUE_PAYLOAD @@ -237,22 +236,13 @@ def enqueue( meta={"backend_name": self.alias}, ) - def save_result() -> None: - nonlocal job - if task.run_after is None: - job = queue.enqueue_job( - job, at_front=task.priority == TASK_MAX_PRIORITY - ) - else: - job = queue.schedule_job(job, task.run_after) - - object.__setattr__(task_result, "enqueued_at", job.enqueued_at) - task_enqueued.send(type(self), task_result=task_result) - - if self._get_enqueue_on_commit_for_task(task): - transaction.on_commit(save_result) + if task.run_after is None: + job = queue.enqueue_job(job, at_front=task.priority == TASK_MAX_PRIORITY) else: - save_result() + job = queue.schedule_job(job, task.run_after) + + object.__setattr__(task_result, "enqueued_at", job.enqueued_at) + task_enqueued.send(type(self), task_result=task_result) return task_result diff --git a/django_tasks/base.py b/django_tasks/base.py index 9d5ab37..8ad6e7b 100644 --- a/django_tasks/base.py +++ b/django_tasks/base.py @@ -82,12 +82,6 @@ class Task(Generic[P, T]): run_after: datetime | None """The earliest this Task will run""" - enqueue_on_commit: bool | None - """ - Whether the Task will be enqueued when the current transaction commits, - immediately, or whatever the backend decides. - """ - takes_context: bool """ Whether the Task receives the Task context when executed. @@ -199,7 +193,6 @@ def task( priority: int = TASK_DEFAULT_PRIORITY, queue_name: str = DEFAULT_TASK_QUEUE_NAME, backend: str = DEFAULT_TASK_BACKEND_ALIAS, - enqueue_on_commit: bool | None = None, takes_context: Literal[False] = False, ) -> Callable[[Callable[P, T]], Task[P, T]]: ... @@ -212,7 +205,6 @@ def task( priority: int = TASK_DEFAULT_PRIORITY, queue_name: str = DEFAULT_TASK_QUEUE_NAME, backend: str = DEFAULT_TASK_BACKEND_ALIAS, - enqueue_on_commit: bool | None = None, takes_context: Literal[True], ) -> Callable[[Callable[Concatenate["TaskContext", P], T]], Task[P, T]]: ... @@ -224,7 +216,6 @@ def task( # type: ignore[misc] priority: int = TASK_DEFAULT_PRIORITY, queue_name: str = DEFAULT_TASK_QUEUE_NAME, backend: str = DEFAULT_TASK_BACKEND_ALIAS, - enqueue_on_commit: bool | None = None, takes_context: bool = False, ) -> ( Task[P, T] @@ -242,7 +233,6 @@ def wrapper(f: Callable[P, T]) -> Task[P, T]: func=f, queue_name=queue_name, backend=backend, - enqueue_on_commit=enqueue_on_commit, takes_context=takes_context, run_after=None, ) diff --git a/tests/tasks.py b/tests/tasks.py index 1051d94..9e0741f 100644 --- a/tests/tasks.py +++ b/tests/tasks.py @@ -55,16 +55,6 @@ def exit_task() -> None: exit(1) -@task(enqueue_on_commit=True) -def enqueue_on_commit_task() -> None: - pass - - -@task(enqueue_on_commit=False) -def never_enqueue_on_commit_task() -> None: - pass - - @task() def hang() -> None: """ diff --git a/tests/tests/test_custom_backend.py b/tests/tests/test_custom_backend.py index 436a81a..f50f1fb 100644 --- a/tests/tests/test_custom_backend.py +++ b/tests/tests/test_custom_backend.py @@ -30,7 +30,6 @@ class CustomBackendNoEnqueue(BaseTaskBackend): TASKS={ "default": { "BACKEND": get_module_path(CustomBackend), - "ENQUEUE_ON_COMMIT": False, "OPTIONS": {"prefix": "PREFIX: "}, }, "no_enqueue": { diff --git a/tests/tests/test_database_backend.py b/tests/tests/test_database_backend.py index 18136a3..6f3bd86 100644 --- a/tests/tests/test_database_backend.py +++ b/tests/tests/test_database_backend.py @@ -322,45 +322,10 @@ def test_priority_range_check(self) -> None: TASKS={ "default": { "BACKEND": "django_tasks.backends.database.DatabaseBackend", - "ENQUEUE_ON_COMMIT": True, - } - } - ) - def test_wait_until_transaction_commit(self) -> None: - self.assertTrue(default_task_backend.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - - with transaction.atomic(): - result = test_tasks.noop_task.enqueue() - - self.assertIsNone(result.enqueued_at) - - self.assertEqual(DBTaskResult.objects.count(), 0) - # SQLite locks the table during this transaction - if connection.vendor != "sqlite": - self.assertEqual(self.get_task_count_in_new_connection(), 0) - - if connection.vendor != "sqlite": - self.assertEqual(self.get_task_count_in_new_connection(), 1) - result.refresh() - self.assertIsNotNone(result.enqueued_at) - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.database.DatabaseBackend", - "ENQUEUE_ON_COMMIT": False, } } ) def test_doesnt_wait_until_transaction_commit(self) -> None: - self.assertFalse(default_task_backend.enqueue_on_commit) - self.assertFalse( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - with transaction.atomic(): result = test_tasks.noop_task.enqueue() @@ -375,36 +340,6 @@ def test_doesnt_wait_until_transaction_commit(self) -> None: if connection.vendor != "sqlite": self.assertEqual(self.get_task_count_in_new_connection(), 1) - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.database.DatabaseBackend", - } - } - ) - def test_wait_until_transaction_by_default(self) -> None: - self.assertTrue(default_task_backend.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.database.DatabaseBackend", - "ENQUEUE_ON_COMMIT": False, - } - } - ) - def test_task_specific_enqueue_on_commit(self) -> None: - self.assertFalse(default_task_backend.enqueue_on_commit) - self.assertTrue(test_tasks.enqueue_on_commit_task.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task( - test_tasks.enqueue_on_commit_task - ) - ) - def test_enqueue_logs(self) -> None: with self.assertLogs("django_tasks", level="DEBUG") as captured_logs: result = test_tasks.noop_task.enqueue() @@ -484,7 +419,6 @@ def test_validate_on_enqueue(self) -> None: "default": { "BACKEND": "django_tasks.backends.rq.RQBackend", "QUEUES": ["unknown_queue"], - "ENQUEUE_ON_COMMIT": False, } } ): @@ -503,7 +437,6 @@ async def test_validate_on_aenqueue(self) -> None: "default": { "BACKEND": "django_tasks.backends.rq.RQBackend", "QUEUES": ["unknown_queue"], - "ENQUEUE_ON_COMMIT": False, } } ): diff --git a/tests/tests/test_dummy_backend.py b/tests/tests/test_dummy_backend.py index 3c3d4c3..1d1c5fb 100644 --- a/tests/tests/test_dummy_backend.py +++ b/tests/tests/test_dummy_backend.py @@ -3,12 +3,10 @@ from unittest import mock from django.db import transaction -from django.db.utils import ConnectionHandler from django.test import ( SimpleTestCase, TransactionTestCase, override_settings, - skipIfDBFeature, ) from django.urls import reverse @@ -24,7 +22,6 @@ "default": { "BACKEND": "django_tasks.backends.dummy.DummyBackend", "QUEUES": [], - "ENQUEUE_ON_COMMIT": False, } } ) @@ -153,13 +150,6 @@ def test_get_result_from_different_request(self) -> None: {"result_id": result_id, "result": None, "status": TaskResultStatus.READY}, ) - def test_enqueue_on_commit(self) -> None: - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task( - test_tasks.enqueue_on_commit_task - ) - ) - def test_enqueue_logs(self) -> None: with self.assertLogs("django_tasks", level="DEBUG") as captured_logs: result = test_tasks.noop_task.enqueue() @@ -185,20 +175,6 @@ def test_check(self) -> None: self.assertEqual(len(errors), 0, errors) - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.dummy.DummyBackend", - "ENQUEUE_ON_COMMIT": True, - } - } - ) - @mock.patch("django_tasks.backends.base.connections", ConnectionHandler({})) - def test_enqueue_on_commit_with_no_databases(self) -> None: - self.assertIn( - "tasks.E001", {error.id for error in default_task_backend.check()} - ) - def test_takes_context(self) -> None: result = test_tasks.get_task_id.enqueue() self.assertEqual(result.status, TaskResultStatus.READY) @@ -223,7 +199,6 @@ def test_validate_on_enqueue(self) -> None: "default": { "BACKEND": "django_tasks.backends.dummy.DummyBackend", "QUEUES": ["queue-1"], - "ENQUEUE_ON_COMMIT": False, } } ): @@ -242,7 +217,6 @@ async def test_validate_on_aenqueue(self) -> None: "default": { "BACKEND": "django_tasks.backends.dummy.DummyBackend", "QUEUES": ["queue-1"], - "ENQUEUE_ON_COMMIT": False, } } ): @@ -257,37 +231,10 @@ class DummyBackendTransactionTestCase(TransactionTestCase): TASKS={ "default": { "BACKEND": "django_tasks.backends.dummy.DummyBackend", - "ENQUEUE_ON_COMMIT": True, - } - } - ) - def test_wait_until_transaction_commit(self) -> None: - self.assertTrue(default_task_backend.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - - with transaction.atomic(): - test_tasks.noop_task.enqueue() - - self.assertEqual(len(default_task_backend.results), 0) # type:ignore[attr-defined] - - self.assertEqual(len(default_task_backend.results), 1) # type:ignore[attr-defined] - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.dummy.DummyBackend", - "ENQUEUE_ON_COMMIT": False, } } ) def test_doesnt_wait_until_transaction_commit(self) -> None: - self.assertFalse(default_task_backend.enqueue_on_commit) - self.assertFalse( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - with transaction.atomic(): result = test_tasks.noop_task.enqueue() @@ -296,71 +243,3 @@ def test_doesnt_wait_until_transaction_commit(self) -> None: self.assertEqual(len(default_task_backend.results), 1) # type:ignore[attr-defined] self.assertEqual(len(default_task_backend.results), 1) # type:ignore[attr-defined] - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.dummy.DummyBackend", - } - } - ) - def test_wait_until_transaction_by_default(self) -> None: - self.assertTrue(default_task_backend.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - - with transaction.atomic(): - result = test_tasks.noop_task.enqueue() - - self.assertIsNone(result.enqueued_at) - - self.assertEqual(len(default_task_backend.results), 0) # type:ignore[attr-defined] - - self.assertEqual(len(default_task_backend.results), 1) # type:ignore[attr-defined] - self.assertIsNone(result.enqueued_at) - result.refresh() - self.assertIsNotNone(result.enqueued_at) - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.dummy.DummyBackend", - "ENQUEUE_ON_COMMIT": False, - } - } - ) - def test_task_specific_enqueue_on_commit(self) -> None: - self.assertFalse(default_task_backend.enqueue_on_commit) - self.assertTrue(test_tasks.enqueue_on_commit_task.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task( - test_tasks.enqueue_on_commit_task - ) - ) - - with transaction.atomic(): - result = test_tasks.enqueue_on_commit_task.enqueue() - - self.assertIsNone(result.enqueued_at) - - self.assertEqual(len(default_task_backend.results), 0) # type:ignore[attr-defined] - - self.assertEqual(len(default_task_backend.results), 1) # type:ignore[attr-defined] - self.assertIsNone(result.enqueued_at) - result.refresh() - self.assertIsNotNone(result.enqueued_at) - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.dummy.DummyBackend", - "ENQUEUE_ON_COMMIT": True, - } - } - ) - @skipIfDBFeature("supports_transactions") - def test_enqueue_on_commit_with_no_transactions(self) -> None: - self.assertIn( - "tasks.E002", {error.id for error in default_task_backend.check()} - ) diff --git a/tests/tests/test_immediate_backend.py b/tests/tests/test_immediate_backend.py index faf33d1..35851c3 100644 --- a/tests/tests/test_immediate_backend.py +++ b/tests/tests/test_immediate_backend.py @@ -18,7 +18,6 @@ "default": { "BACKEND": "django_tasks.backends.immediate.ImmediateBackend", "QUEUES": [], - "ENQUEUE_ON_COMMIT": False, } } ) @@ -235,13 +234,6 @@ def test_get_result_from_different_request(self) -> None: ): response = self.client.get(reverse("result", args=[result_id])) - def test_enqueue_on_commit(self) -> None: - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task( - test_tasks.enqueue_on_commit_task - ) - ) - def test_enqueue_logs(self) -> None: with self.assertLogs("django_tasks", level="DEBUG") as captured_logs: result = test_tasks.noop_task.enqueue() @@ -292,7 +284,6 @@ def test_validate_on_enqueue(self) -> None: "default": { "BACKEND": "django_tasks.backends.immediate.ImmediateBackend", "QUEUES": ["queue-1"], - "ENQUEUE_ON_COMMIT": False, } } ): @@ -311,7 +302,6 @@ async def test_validate_on_aenqueue(self) -> None: "default": { "BACKEND": "django_tasks.backends.immediate.ImmediateBackend", "QUEUES": ["queue-1"], - "ENQUEUE_ON_COMMIT": False, } } ): @@ -326,41 +316,10 @@ class ImmediateBackendTransactionTestCase(TransactionTestCase): TASKS={ "default": { "BACKEND": "django_tasks.backends.immediate.ImmediateBackend", - "ENQUEUE_ON_COMMIT": True, - } - } - ) - def test_wait_until_transaction_commit(self) -> None: - self.assertTrue(default_task_backend.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - - with transaction.atomic(): - result = test_tasks.noop_task.enqueue() - - self.assertIsNone(result.enqueued_at) - self.assertEqual(result.attempts, 0) - self.assertEqual(result.status, TaskResultStatus.READY) - - self.assertEqual(result.status, TaskResultStatus.SUCCEEDED) - self.assertIsNotNone(result.enqueued_at) - self.assertEqual(result.attempts, 1) - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.immediate.ImmediateBackend", - "ENQUEUE_ON_COMMIT": False, } } ) def test_doesnt_wait_until_transaction_commit(self) -> None: - self.assertFalse(default_task_backend.enqueue_on_commit) - self.assertFalse( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - with transaction.atomic(): result = test_tasks.noop_task.enqueue() @@ -369,49 +328,3 @@ def test_doesnt_wait_until_transaction_commit(self) -> None: self.assertEqual(result.status, TaskResultStatus.SUCCEEDED) self.assertEqual(result.status, TaskResultStatus.SUCCEEDED) - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.immediate.ImmediateBackend", - } - } - ) - def test_wait_until_transaction_by_default(self) -> None: - self.assertTrue(default_task_backend.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - - with transaction.atomic(): - result = test_tasks.noop_task.enqueue() - - self.assertIsNone(result.enqueued_at) - self.assertEqual(result.status, TaskResultStatus.READY) - - self.assertEqual(result.status, TaskResultStatus.SUCCEEDED) - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.immediate.ImmediateBackend", - "ENQUEUE_ON_COMMIT": False, - } - } - ) - def test_task_specific_enqueue_on_commit(self) -> None: - self.assertFalse(default_task_backend.enqueue_on_commit) - self.assertTrue(test_tasks.enqueue_on_commit_task.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task( - test_tasks.enqueue_on_commit_task - ) - ) - - with transaction.atomic(): - result = test_tasks.enqueue_on_commit_task.enqueue() - - self.assertIsNone(result.enqueued_at) - self.assertEqual(result.status, TaskResultStatus.READY) - - self.assertEqual(result.status, TaskResultStatus.SUCCEEDED) diff --git a/tests/tests/test_rq_backend.py b/tests/tests/test_rq_backend.py index cee9f64..229f3f8 100644 --- a/tests/tests/test_rq_backend.py +++ b/tests/tests/test_rq_backend.py @@ -357,43 +357,10 @@ def test_rq_app_missing(self) -> None: TASKS={ "default": { "BACKEND": "django_tasks.backends.rq.RQBackend", - "ENQUEUE_ON_COMMIT": True, - } - } - ) - def test_wait_until_transaction_commit(self) -> None: - self.assertTrue(default_task_backend.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - - queue = django_rq.get_queue("default", job_class=Job) - - with transaction.atomic(): - result = test_tasks.noop_task.enqueue() - - self.assertIsNone(result.enqueued_at) - - self.assertEqual(queue.count, 0) - self.assertEqual(queue.count, 1) - - result.refresh() - self.assertIsNotNone(result.enqueued_at) - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.rq.RQBackend", - "ENQUEUE_ON_COMMIT": False, } } ) def test_doesnt_wait_until_transaction_commit(self) -> None: - self.assertFalse(default_task_backend.enqueue_on_commit) - self.assertFalse( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - queue = django_rq.get_queue("default", job_class=Job) with transaction.atomic(): @@ -405,36 +372,6 @@ def test_doesnt_wait_until_transaction_commit(self) -> None: self.assertEqual(queue.count, 1) - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.rq.RQBackend", - } - } - ) - def test_wait_until_transaction_by_default(self) -> None: - self.assertTrue(default_task_backend.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task(test_tasks.noop_task) - ) - - @override_settings( - TASKS={ - "default": { - "BACKEND": "django_tasks.backends.rq.RQBackend", - "ENQUEUE_ON_COMMIT": False, - } - } - ) - def test_task_specific_enqueue_on_commit(self) -> None: - self.assertFalse(default_task_backend.enqueue_on_commit) - self.assertTrue(test_tasks.enqueue_on_commit_task.enqueue_on_commit) - self.assertTrue( - default_task_backend._get_enqueue_on_commit_for_task( - test_tasks.enqueue_on_commit_task - ) - ) - def test_enqueue_logs(self) -> None: with self.assertLogs("django_tasks", level="DEBUG") as captured_logs: result = test_tasks.noop_task.enqueue() @@ -567,7 +504,6 @@ def test_validate_on_enqueue(self) -> None: "default": { "BACKEND": "django_tasks.backends.rq.RQBackend", "QUEUES": ["unknown_queue"], - "ENQUEUE_ON_COMMIT": False, } } ): @@ -586,7 +522,6 @@ async def test_validate_on_aenqueue(self) -> None: "default": { "BACKEND": "django_tasks.backends.rq.RQBackend", "QUEUES": ["unknown_queue"], - "ENQUEUE_ON_COMMIT": False, } } ): diff --git a/tests/tests/test_tasks.py b/tests/tests/test_tasks.py index 286a64c..4d73180 100644 --- a/tests/tests/test_tasks.py +++ b/tests/tests/test_tasks.py @@ -29,11 +29,9 @@ "default": { "BACKEND": "django_tasks.backends.dummy.DummyBackend", "QUEUES": ["default", "queue_1"], - "ENQUEUE_ON_COMMIT": False, }, "immediate": { "BACKEND": "django_tasks.backends.immediate.ImmediateBackend", - "ENQUEUE_ON_COMMIT": False, "QUEUES": [], }, "missing": {"BACKEND": "does.not.exist"},