Coverage for backend/django/Economics/results/viewsets.py: 95%

31 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2026-06-23 21:51 +0000

1from drf_spectacular.utils import OpenApiParameter, OpenApiTypes, extend_schema 

2 

3from core.viewset import ReadOnlyModelViewSet 

4from Economics.results.models import EconomicsChartDataset, EconomicsResultLine, EconomicsResultRun 

5from Economics.results.serializers import EconomicsChartDatasetSerializer, EconomicsResultLineSerializer, EconomicsResultRunSerializer 

6 

7 

8class EconomicsResultRunViewSet(ReadOnlyModelViewSet): 

9 serializer_class = EconomicsResultRunSerializer 

10 

11 def get_queryset(self): 

12 queryset = EconomicsResultRun.objects.select_related("study").prefetch_related("lines", "chart_datasets") 

13 study = self.request.query_params.get("study") 

14 return queryset.filter(study_id=study) if study is not None else queryset 

15 

16 

17class EconomicsResultLineViewSet(ReadOnlyModelViewSet): 

18 serializer_class = EconomicsResultLineSerializer 

19 

20 @extend_schema( 

21 parameters=[ 

22 OpenApiParameter(name="result_run", type=OpenApiTypes.INT, required=False), 

23 OpenApiParameter(name="study", type=OpenApiTypes.INT, required=False), 

24 OpenApiParameter(name="source_costable_item", type=OpenApiTypes.INT, required=False), 

25 OpenApiParameter(name="kind", type=OpenApiTypes.STR, required=False), 

26 OpenApiParameter(name="group", type=OpenApiTypes.STR, required=False), 

27 ] 

28 ) 

29 def list(self, request, *args, **kwargs): 

30 return super().list(request, *args, **kwargs) 

31 

32 def get_queryset(self): 

33 queryset = EconomicsResultLine.objects.select_related( 

34 "result_run", 

35 "result_run__study", 

36 "source_costable_item", 

37 "source_cost_curve", 

38 "source_capital_line", 

39 "source_operating_line", 

40 ) 

41 filters = { 

42 "result_run_id": self.request.query_params.get("result_run"), 

43 "result_run__study_id": self.request.query_params.get("study"), 

44 "source_costable_item_id": self.request.query_params.get("source_costable_item"), 

45 "kind": self.request.query_params.get("kind"), 

46 "group": self.request.query_params.get("group"), 

47 } 

48 for field_name, value in filters.items(): 

49 if value: 

50 queryset = queryset.filter(**{field_name: value}) 

51 return queryset 

52 

53 

54class EconomicsChartDatasetViewSet(ReadOnlyModelViewSet): 

55 serializer_class = EconomicsChartDatasetSerializer 

56 

57 def get_queryset(self): 

58 queryset = EconomicsChartDataset.objects.select_related("result_run", "result_run__study") 

59 result_run = self.request.query_params.get("result_run") 

60 if result_run is not None: 60 ↛ 61line 60 didn't jump to line 61 because the condition on line 60 was never true

61 return queryset.filter(result_run_id=result_run) 

62 study = self.request.query_params.get("study") 

63 return queryset.filter(result_run__study_id=study) if study is not None else queryset