Coverage for backend/django/Economics/studies/api_mutations.py: 66%
29 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
1from Economics.costing.capital.generated_lines import sync_generated_capital_lines
2from Economics.studies.models import EconomicsStudy
3from Economics.studies.services.result_staleness import mark_study_stale
6class StudyMutationMixin:
7 """Mark existing presentation runs stale after mutating study-owned rows."""
9 stale_reason = "economics_api_saved"
10 sync_generated_capital_lines = False
12 def _study_for_instance(self, instance) -> EconomicsStudy | None:
13 return getattr(instance, "study", None)
15 def perform_create(self, serializer):
16 instance = serializer.save()
17 study = self._study_for_instance(instance)
18 if study is not None: 18 ↛ exitline 18 didn't return from function 'perform_create' because the condition on line 18 was always true
19 if self.sync_generated_capital_lines: 19 ↛ 20line 19 didn't jump to line 20 because the condition on line 19 was never true
20 sync_generated_capital_lines(study)
21 mark_study_stale(study, reason=self.stale_reason)
23 def perform_update(self, serializer):
24 instance = serializer.save()
25 study = self._study_for_instance(instance)
26 if study is not None: 26 ↛ exitline 26 didn't return from function 'perform_update' because the condition on line 26 was always true
27 if self.sync_generated_capital_lines:
28 sync_generated_capital_lines(study)
29 mark_study_stale(study, reason=self.stale_reason)
31 def perform_destroy(self, instance):
32 study = self._study_for_instance(instance)
33 super().perform_destroy(instance)
34 if study is not None:
35 if self.sync_generated_capital_lines:
36 sync_generated_capital_lines(study)
37 mark_study_stale(study, reason=self.stale_reason)