Coverage for backend/django/Economics/costing/capital/viewsets.py: 97%
30 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 core.viewset import ModelViewSet
2from rest_framework.response import Response
3from Economics.costing.models import CapitalCostLine
4from Economics.costing.capital.serializers import CapitalCostLineSerializer
5from Economics.costing.capital.capital_line_sources import GENERATED_CAPITAL_LINE_SOURCE
6from Economics.costing.capital.generated_lines import sync_generated_capital_lines
7from Economics.studies.api_mutations import StudyMutationMixin
8from Economics.studies.services.result_staleness import mark_study_stale
11class CapitalCostLineViewSet(StudyMutationMixin, ModelViewSet):
12 serializer_class = CapitalCostLineSerializer
13 stale_reason = "economics_capital_line_api_saved"
15 def get_queryset(self):
16 queryset = CapitalCostLine.objects.select_related("study", "costable_item", "cost_curve")
17 study = self.request.query_params.get("study")
18 return queryset.filter(study_id=study) if study is not None else queryset
20 def update(self, request, *args, **kwargs):
21 partial = kwargs.pop("partial", False)
22 instance = self.get_object()
23 serializer = self.get_serializer(instance, data=request.data, partial=partial)
24 serializer.is_valid(raise_exception=True)
25 self.perform_update(serializer)
26 refreshed = self.get_queryset().get(pk=serializer.instance.pk)
27 return Response(self.get_serializer(refreshed).data)
29 def perform_update(self, serializer):
30 instance = serializer.save()
31 study = self._study_for_instance(instance)
32 if study is not None: 32 ↛ exitline 32 didn't return from function 'perform_update' because the condition on line 32 was always true
33 if instance.source == GENERATED_CAPITAL_LINE_SOURCE and instance.costable_item_id is not None:
34 sync_generated_capital_lines(study)
35 mark_study_stale(study, reason=self.stale_reason)