Coverage for backend/django/idaes_factory/adapters/unit_model_adapter.py: 100%
14 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 __future__ import annotations
3from ahuora_builder_types import UnitModelSchema
4from typing import TYPE_CHECKING, Any, Protocol
6from .arg_adapter import ArgAdapter
7from .port_adapter import SerialisePortAdapter
8from .property_info_adapter import SerialisePropertiesAdapter
10if TYPE_CHECKING:
11 from ..idaes_factory_context import IdaesFactoryContext
14class _SectionAdapter(Protocol):
15 def serialise(self, ctx: "IdaesFactoryContext", unit_model: Any) -> Any:
16 ...
19class UnitModelAdapter:
20 """Serialise a Django unit operation into the schema sent to the IDAES service."""
22 def __init__(
23 self,
24 args: ArgAdapter,
25 properties: _SectionAdapter | None = None,
26 ports: _SectionAdapter | None = None,
27 ) -> None:
28 self.arg_schema: ArgAdapter = args
29 self.properties_schema: _SectionAdapter = (
30 properties if properties is not None else SerialisePropertiesAdapter()
31 )
32 self.ports_schema: _SectionAdapter = (
33 ports if ports is not None else SerialisePortAdapter()
34 )
36 def serialise(self, ctx: "IdaesFactoryContext", unit_model) -> UnitModelSchema:
37 return UnitModelSchema(
38 id=unit_model.pk,
39 type=unit_model.objectType,
40 name=unit_model.componentName,
41 args=self.arg_schema.serialise(ctx, unit_model),
42 properties=self.properties_schema.serialise(ctx, unit_model),
43 ports=self.ports_schema.serialise(ctx, unit_model),
44 initial_values=unit_model.initial_values,
45 )