Coverage for backend/flowsheetInternals/graphicData/viewsets/GraphicObjectViewSet.py: 64%
20 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
1from core.auxiliary.models import PropertyInfo
2from core.auxiliary.models.PropertyValue import PropertyValue
3from core.viewset import ModelViewSet
4from flowsheetInternals.graphicData.models.groupingModel import Grouping
5from flowsheetInternals.unitops.models.Port import Port
6from flowsheetInternals.graphicData.serializers.graphicObjectSerializer import GraphicObjectSerializer
7from flowsheetInternals.graphicData.models.graphicObjectModel import GraphicObject
8from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes
9from django.db.models import Prefetch
11class GraphicObjectViewSet(ModelViewSet):
12 serializer_class = GraphicObjectSerializer
14 def get_queryset(self):
15 queryset = GraphicObject.objects.filter(
16 simulationObject__is_deleted=False
17 ).select_related(
18 "simulationObject", # get related simulationObject in one query
19 ).prefetch_related(
20 Prefetch("simulationObject__grouping", queryset=Grouping.objects.only("id")),
21 Prefetch(
22 "simulationObject__connectedPorts",
23 queryset=Port.objects.select_related("unitOp", "stream") # optimise connectedPorts relationships
24 ),
25 Prefetch(
26 "simulationObject__properties__ContainedProperties",
27 queryset=PropertyInfo.objects
28 .select_related("recycleConnection")
29 .prefetch_related(
30 Prefetch("values", queryset=PropertyValue.objects
31 .select_related("controlManipulated", "controlSetPoint")
32 .prefetch_related("indexedItems"))
33 )
34 )
35 )
37 groupId = self.request.query_params.get("group")
38 if groupId is not None:
39 queryset = queryset.filter(group_id=groupId)
40 return queryset
42 @extend_schema(
43 parameters=[
44 OpenApiParameter(name="flowsheet",
45 required=False, type=OpenApiTypes.INT),
46 OpenApiParameter(name="group", required=False,
47 type=OpenApiTypes.INT),
48 ]
49 )
50 def list(self, request):
51 return super().list(request)