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

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 

9 

10 

11class CapitalCostLineViewSet(StudyMutationMixin, ModelViewSet): 

12 serializer_class = CapitalCostLineSerializer 

13 stale_reason = "economics_capital_line_api_saved" 

14 

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 

19 

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) 

28 

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)