Coverage for backend/django/PinchAnalysis/views/StreamDataEntryViewSet.py: 42%
68 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-12-18 04:00 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-12-18 04:00 +0000
1from requests import Response
2from PinchAnalysis.models.InputModels import StreamDataEntry
3# from rest_framework import status
4# from rest_framework.response import Response
5from PinchAnalysis.models.next_stream_data_entry import next_sdes_for
6from core.viewset import ModelViewSet
7from rest_framework import serializers
8from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes
9# from rest_framework.decorators import action
12class StreamDataEntrySerializer(serializers.ModelSerializer):
13 inlet_outlet_streams = serializers.SerializerMethodField()
14 unitop_type = serializers.SerializerMethodField()
15 temperatures = serializers.SerializerMethodField()
16 pressures = serializers.SerializerMethodField()
17 enthalpies = serializers.SerializerMethodField()
18 heat_flow = serializers.SerializerMethodField()
19 nextStream = serializers.SerializerMethodField(read_only=True)
21 class Meta:
22 model = StreamDataEntry
23 fields = [
24 'id',
25 'flowsheet',
26 'custom',
27 'group',
28 'streamDataProject',
29 'inlet_outlet_streams',
30 'unitop',
31 'unitop_type',
32 'property_package_mapping',
33 'nextStream',
34 't_h_data',
35 'states',
36 'created_at',
37 'temperatures',
38 'pressures',
39 'enthalpies',
40 'heat_flow',
41 'expanded',
42 ]
44 def get_nextStream(self, obj):
45 nxt = next_sdes_for(obj)
46 return [s.id for s in nxt]
48 def get_inlet_outlet_streams(self, obj):
49 try:
50 print(obj.inlet_outlet_stream)
51 return {"inlet": obj.inlet_outlet_stream[0].id, "outlet": obj.inlet_outlet_stream[1].id}
52 except Exception:
53 return {"inlet": None, "outlet": None}
55 def get_temperatures(self, obj):
56 try:
57 inlet, outlet = obj.temperatures
58 return {"inlet": inlet.get_value(), "outlet": outlet.get_value()}
59 except Exception:
60 return {"inlet": None, "outlet": None}
62 def get_pressures(self, obj):
63 try:
64 inlet, outlet = obj.pressures
65 return {"inlet": inlet.get_value(), "outlet": outlet.get_value()}
66 except Exception:
67 return {"inlet": None, "outlet": None}
69 def get_enthalpies(self, obj):
70 try:
71 inlet, outlet = obj.enthalpies
72 return {"inlet": inlet.get_value(), "outlet": outlet.get_value()}
73 except Exception:
74 return {"inlet": None, "outlet": None}
76 def get_heat_flow(self, obj):
77 try:
78 return obj.heat_flow.get_value()
79 except Exception:
80 return None
82 def get_unitop_type(self, obj):
83 if obj.unitop:
84 return getattr(obj.unitop.schema, "displayType", None)
85 return None
88class StreamDataEntryViewSet(ModelViewSet):
89 serializer_class = StreamDataEntrySerializer
91 def get_queryset(self):
92 queryset = StreamDataEntry.objects.all()
93 stream_data_project = self.request.query_params.get("streamDataProject")
94 if stream_data_project:
95 queryset = queryset.filter(streamDataProject=stream_data_project)
96 return queryset
98 def get_serializer_context(self):
99 ctx = super().get_serializer_context()
100 ctx["all_sdes"] = list(
101 self.get_queryset()
102 .select_related("unitop")
103 .prefetch_related("unitop__ports__stream")
104 )
105 return ctx
107 @extend_schema(
108 parameters=[
109 OpenApiParameter(name="streamDataProject", required=True, type=OpenApiTypes.INT),
110 ],
111 responses=StreamDataEntrySerializer(many=True)
112 )
113 def list(self, request):
114 return super().list(request)