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
« 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
3from core.viewset import ReadOnlyModelViewSet
4from Economics.results.models import EconomicsChartDataset, EconomicsResultLine, EconomicsResultRun
5from Economics.results.serializers import EconomicsChartDatasetSerializer, EconomicsResultLineSerializer, EconomicsResultRunSerializer
8class EconomicsResultRunViewSet(ReadOnlyModelViewSet):
9 serializer_class = EconomicsResultRunSerializer
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
17class EconomicsResultLineViewSet(ReadOnlyModelViewSet):
18 serializer_class = EconomicsResultLineSerializer
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)
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
54class EconomicsChartDatasetViewSet(ReadOnlyModelViewSet):
55 serializer_class = EconomicsChartDatasetSerializer
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