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

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 

10 

11class GraphicObjectViewSet(ModelViewSet): 

12 serializer_class = GraphicObjectSerializer 

13 

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 ) 

36 

37 groupId = self.request.query_params.get("group") 

38 if groupId is not None: 

39 queryset = queryset.filter(group_id=groupId) 

40 return queryset 

41 

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)