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

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 

8 

9 

10class CapitalCostLineViewSet(StudyMutationMixin, ModelViewSet): 

11 serializer_class = CapitalCostLineSerializer 

12 stale_reason = "economics_capital_line_api_saved" 

13 

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 

18 

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) 

27 

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)