Skip to content

Commit 2b32dd2

Browse files
committed
Revert "Remove redundancy"
This reverts commit afecfcc.
1 parent afecfcc commit 2b32dd2

File tree

2 files changed

+75
-3
lines changed

2 files changed

+75
-3
lines changed

src/task_processor/routers.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from django.conf import settings
12
from django.db.models import Model
23

34

@@ -8,10 +9,17 @@ class TaskProcessorRouter:
89

910
route_app_labels = ["task_processor"]
1011

12+
@property
13+
def is_enabled(self) -> bool:
14+
return "task_processor" in settings.TASK_PROCESSOR_DATABASES
15+
1116
def db_for_read(self, model: type[Model], **hints: None) -> str | None:
1217
"""
1318
If enabled, route read operations to the task processor database
1419
"""
20+
if not self.is_enabled:
21+
return None
22+
1523
if model._meta.app_label in self.route_app_labels:
1624
return "task_processor"
1725

@@ -21,6 +29,9 @@ def db_for_write(self, model: type[Model], **hints: None) -> str | None:
2129
"""
2230
If enabled, route write operations to the task processor database
2331
"""
32+
if not self.is_enabled:
33+
return None
34+
2435
if model._meta.app_label in self.route_app_labels:
2536
return "task_processor"
2637

@@ -30,6 +41,9 @@ def allow_relation(self, obj1: Model, obj2: Model, **hints: None) -> bool | None
3041
"""
3142
If enabled, allow relations between task processor models
3243
"""
44+
if not self.is_enabled:
45+
return None
46+
3347
both_objects_from_task_processor = (
3448
obj1._meta.app_label in self.route_app_labels
3549
and obj2._meta.app_label in self.route_app_labels
@@ -58,6 +72,9 @@ def allow_migrate(
5872
- We want to make it easier to migrate to the new database, _or back_
5973
to a single database setup if needed. Running DDL consistently helps.
6074
"""
75+
if not self.is_enabled:
76+
return None
77+
6178
if app_label in self.route_app_labels:
6279
return db in ["default", "task_processor"]
6380

tests/unit/task_processor/test_unit_task_processor_routers.py

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,80 @@
44
from django.apps import apps
55
from django.conf import settings
66
from django.db.models import Model
7+
from pytest_django.fixtures import SettingsWrapper
78
from pytest_mock import MockerFixture
89

910
from task_processor import routers
1011

1112

13+
@pytest.mark.parametrize(
14+
"given_settings, expected",
15+
[
16+
({"TASK_PROCESSOR_DATABASES": ["task_processor"]}, True),
17+
({"TASK_PROCESSOR_DATABASES": ["default", "task_processor"]}, True),
18+
({"TASK_PROCESSOR_DATABASES": ["default"]}, False),
19+
],
20+
)
21+
def test_TaskProcessorRouter__checks_whether_is_enabled(
22+
settings: SettingsWrapper,
23+
given_settings: dict[str, None | str],
24+
expected: bool,
25+
) -> None:
26+
# Given
27+
for key, value in given_settings.items():
28+
setattr(settings, key, value)
29+
30+
# When
31+
router = routers.TaskProcessorRouter()
32+
33+
# Then
34+
assert router.is_enabled is expected
35+
36+
1237
@pytest.mark.parametrize("model", apps.get_app_config("task_processor").get_models())
1338
def test_TaskProcessorRouter__enabled__routes_queries_to_task_processor_database(
1439
mocker: MockerFixture,
1540
model: type[Model],
1641
) -> None:
1742
# Given
18-
router = routers.TaskProcessorRouter()
43+
mocker.patch.object(routers.TaskProcessorRouter, "is_enabled", new=True)
1944

2045
# When
46+
router = routers.TaskProcessorRouter()
2147
read_database = router.db_for_read(model)
2248
write_database = router.db_for_write(model)
2349

2450
# Then
2551
assert read_database == write_database == "task_processor"
2652

2753

54+
@pytest.mark.parametrize("model", apps.get_app_config("task_processor").get_models())
55+
def test_TaskProcessorRouter__disabled__does_not_route_database_queries(
56+
mocker: MockerFixture,
57+
model: type[Model],
58+
) -> None:
59+
# Given
60+
mocker.patch.object(routers.TaskProcessorRouter, "is_enabled", new=False)
61+
62+
# When
63+
router = routers.TaskProcessorRouter()
64+
read_database = router.db_for_read(model)
65+
write_database = router.db_for_write(model)
66+
allows_relation = router.allow_relation(model(), model())
67+
allows_migrate = {
68+
router.allow_migrate("default", app_label="task_processor"),
69+
router.allow_migrate("task_processor", app_label="task_processor"),
70+
router.allow_migrate("other", app_label="task_processor"),
71+
router.allow_migrate("task_processor", app_label="other"),
72+
}
73+
74+
# Then
75+
assert read_database is None
76+
assert write_database is None
77+
assert allows_relation is None
78+
assert allows_migrate == {None}
79+
80+
2881
@pytest.mark.parametrize(
2982
"model1, model2, expected",
3083
[ # True if both models are from task_processor app
@@ -45,9 +98,10 @@ def test_TaskProcessorRouter__allow_relation__returns_according_to_given_models(
4598
expected: bool,
4699
) -> None:
47100
# Given
48-
router = routers.TaskProcessorRouter()
101+
mocker.patch.object(routers.TaskProcessorRouter, "is_enabled", new=True)
49102

50103
# When
104+
router = routers.TaskProcessorRouter()
51105
allow_relation = router.allow_relation(model1(), model2())
52106

53107
# Then
@@ -72,9 +126,10 @@ def test_TaskProcessorRouter__allow_migrate__applies_to_both_databases(
72126
mocker: MockerFixture,
73127
) -> None:
74128
# Given
75-
router = routers.TaskProcessorRouter()
129+
mocker.patch.object(routers.TaskProcessorRouter, "is_enabled", new=True)
76130

77131
# When
132+
router = routers.TaskProcessorRouter()
78133
allow_migrate = router.allow_migrate(database, app_label)
79134

80135
# Then

0 commit comments

Comments
 (0)