Coverage for backend/idaes_factory/adapters/unit_models/simple_header_adapter.py: 96%
40 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 idaes_factory.queryset_lookup import get_all_ports
2from ..core_adapters import *
3from core.auxiliary.enums import ConType
4from flowsheetInternals.unitops.models import *
5from ..generic_adapters import NumInletsAdapter, NumOutletsAdapter
6from ..stream_properties import serialise_stream
8class SimpleHeaderPortListAdapter(PortListAdapter):
9 """
10 Handles the serialisation and reloading of the ports of a header.
11 Includes separate handling for condensate_outlet port.
12 """
13 def __init__(self):
14 pass
16 def serialise(self, ctx, unit_model: SimulationObject):
17 portList = {}
19 # Handle inlets
20 inlets = [ i for i in unit_model.ports.filter(direction=ConType.Inlet, stream__isnull=False)]
22 # Sort regular inlets by index
23 inlets.sort(key=lambda x: x.index if hasattr(x, 'index') else 0)
25 # Add regular inlets
26 for i, inlet in enumerate(inlets):
27 portList[f"inlet_{i+1}"] = {
28 "id": inlet.pk,
29 "properties": serialise_stream(ctx, inlet.stream, is_inlet=True)
30 }
32 # Handle outlets
33 outlets = unit_model.ports.filter(direction=ConType.Outlet, stream__isnull=False)
35 # Separate special outlets
36 condensate_outlet = None
37 vent_outlet = None
38 regular_outlets = []
40 for outlet in outlets:
41 if outlet.key == "outlet_condensate":
42 condensate_outlet = outlet
43 elif outlet.key == "outlet_vent":
44 vent_outlet = outlet
45 else:
46 regular_outlets.append(outlet)
48 # Sort regular outlets
49 regular_outlets.sort(key=lambda x: x.index if hasattr(x, 'index') else 0)
50 # Add regular outlets
51 for i, outlet in enumerate(regular_outlets):
52 portList[f"outlet_{i+1}"] = {
53 "id": outlet.pk,
54 "properties": serialise_stream(ctx, outlet.stream, is_inlet=False)
55 }
57 # Add vent outlet if it exists (named "vent" not "outlet_N")
58 if vent_outlet: 58 ↛ 65line 58 didn't jump to line 65 because the condition on line 58 was always true
59 portList["outlet_vent"] = {
60 "id": vent_outlet.pk,
61 "properties": serialise_stream(ctx, vent_outlet.stream, is_inlet=False)
62 }
64 # Add condensate outlet
65 if condensate_outlet: 65 ↛ 71line 65 didn't jump to line 71 because the condition on line 65 was always true
66 portList["outlet_condensate"] = {
67 "id": condensate_outlet.pk,
68 "properties": serialise_stream(ctx, condensate_outlet.stream, is_inlet=False)
69 }
71 return portList
73class HeaderOutletsAdapter(ValueAdapter):
74 def serialise(self, ctx, unit_model: SimulationObject):
75 return len(get_all_ports(unit_model, "outlet"))
77class HeaderInletsAdapter(ValueAdapter):
78 def serialise(self, ctx, unit_model: SimulationObject):
79 return len(get_all_ports(unit_model, "inlet"))
81simple_header_adapter = UnitModelAdapter(
82 args=ArgAdapter({
83 "property_package": PropertyPackageAdapter(),
84 "num_inlets": HeaderInletsAdapter(),
85 "num_outlets": HeaderOutletsAdapter()
86 }),
87 properties=SerialisePropertiesAdapter(),
88 ports=SimpleHeaderPortListAdapter()
89)