Coverage for backend/django/Economics/costing/capital/viewsets.py: 97%
29 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-06-23 21:51 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-06-23 21:51 +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, _mark_study_stale
10class CapitalCostLineViewSet(StudyMutationMixin, ModelViewSet):
11 serializer_class = CapitalCostLineSerializer
12 stale_reason = "economics_capital_line_api_saved"
14 def get_queryset(self):
15 queryset = CapitalCostLine.objects.select_related("study", "costable_item", "cost_curve")
16 study = self.request.query_params.get("study")
17 return queryset.filter(study_id=study) if study is not None else queryset
19 def update(self, request, *args, **kwargs):
20 partial = kwargs.pop("partial", False)
21 instance = self.get_object()
22 serializer = self.get_serializer(instance, data=request.data, partial=partial)
23 serializer.is_valid(raise_exception=True)
24 self.perform_update(serializer)
25 refreshed = self.get_queryset().get(pk=serializer.instance.pk)
26 return Response(self.get_serializer(refreshed).data)
28 def perform_update(self, serializer):
29 instance = serializer.save()
30 study = self._study_for_instance(instance)
31 if study is not None: 31 ↛ exitline 31 didn't return from function 'perform_update' because the condition on line 31 was always true
32 if instance.source == GENERATED_CAPITAL_LINE_SOURCE and instance.costable_item_id is not None:
33 _sync_generated_capital_lines(study)
34 _mark_study_stale(study, reason=self.stale_reason)