Skip to content

Commit 70168f9

Browse files
fix: evaluate skip_validation at runtime in BaseModel.save()
The default parameter `skip_validation = not settings.V3_FEATURE_LOCATIONS` was evaluated once at class definition time (import). This caused different query counts between local dev (V3=False at startup) and CI (V3=True at startup), because @override_settings in tests could not affect the already baked-in default. Changed to evaluate at runtime so full_clean() validation runs correctly based on the active setting.
1 parent 1a52e68 commit 70168f9

2 files changed

Lines changed: 17 additions & 14 deletions

File tree

dojo/base_models/base.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class Meta:
4242

4343
abstract = True
4444

45-
def save(self, *args: list, skip_validation: bool = not settings.V3_FEATURE_LOCATIONS, **kwargs: dict) -> None:
45+
def save(self, *args: list, skip_validation: bool | None = None, **kwargs: dict) -> None:
4646
"""
4747
Override save method to call the `full_clean()` validation function each save.
4848
@@ -53,6 +53,9 @@ def save(self, *args: list, skip_validation: bool = not settings.V3_FEATURE_LOCA
5353
- Validate the field uniqueness - `validate_unique()`
5454
All three steps are performed when you call a model's full_clean() method in the order above
5555
"""
56+
# make sure this is evaluated at runtime, not at class definition time which would be the case if we used it in the parameter default value
57+
if skip_validation is None:
58+
skip_validation = not settings.V3_FEATURE_LOCATIONS
5659
# Run the pre save logic, if enabled
5760
self.pre_save_logic()
5861
# Call the validations

unittests/test_importers_performance.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -518,11 +518,11 @@ def test_import_reimport_reimport_performance_pghistory_async(self):
518518
configure_pghistory_triggers()
519519

520520
self._import_reimport_performance(
521-
expected_num_queries1=1017,
521+
expected_num_queries1=1225,
522522
expected_num_async_tasks1=6,
523-
expected_num_queries2=669,
523+
expected_num_queries2=715,
524524
expected_num_async_tasks2=17,
525-
expected_num_queries3=344,
525+
expected_num_queries3=345,
526526
expected_num_async_tasks3=16,
527527
)
528528

@@ -540,11 +540,11 @@ def test_import_reimport_reimport_performance_pghistory_no_async(self):
540540
testuser.usercontactinfo.save()
541541

542542
self._import_reimport_performance(
543-
expected_num_queries1=1024,
543+
expected_num_queries1=1232,
544544
expected_num_async_tasks1=6,
545-
expected_num_queries2=676,
545+
expected_num_queries2=722,
546546
expected_num_async_tasks2=17,
547-
expected_num_queries3=351,
547+
expected_num_queries3=352,
548548
expected_num_async_tasks3=16,
549549
)
550550

@@ -563,11 +563,11 @@ def test_import_reimport_reimport_performance_pghistory_no_async_with_product_gr
563563
self.system_settings(enable_product_grade=True)
564564

565565
self._import_reimport_performance(
566-
expected_num_queries1=1031,
566+
expected_num_queries1=1242,
567567
expected_num_async_tasks1=8,
568-
expected_num_queries2=683,
568+
expected_num_queries2=732,
569569
expected_num_async_tasks2=19,
570-
expected_num_queries3=355,
570+
expected_num_queries3=356,
571571
expected_num_async_tasks3=18,
572572
)
573573

@@ -661,9 +661,9 @@ def test_deduplication_performance_pghistory_async(self):
661661
self.system_settings(enable_deduplication=True)
662662

663663
self._deduplication_performance(
664-
expected_num_queries1=1192,
664+
expected_num_queries1=1445,
665665
expected_num_async_tasks1=7,
666-
expected_num_queries2=865,
666+
expected_num_queries2=1016,
667667
expected_num_async_tasks2=7,
668668
check_duplicates=False, # Async mode - deduplication happens later
669669
)
@@ -681,8 +681,8 @@ def test_deduplication_performance_pghistory_no_async(self):
681681
testuser.usercontactinfo.save()
682682

683683
self._deduplication_performance(
684-
expected_num_queries1=1199,
684+
expected_num_queries1=1452,
685685
expected_num_async_tasks1=7,
686-
expected_num_queries2=1138,
686+
expected_num_queries2=1289,
687687
expected_num_async_tasks2=7,
688688
)

0 commit comments

Comments
 (0)