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

1from __future__ import annotations 

2 

3from ahuora_builder_types import UnitModelSchema 

4from typing import TYPE_CHECKING, Any, Protocol 

5 

6from .arg_adapter import ArgAdapter 

7from .port_adapter import SerialisePortAdapter 

8from .property_info_adapter import SerialisePropertiesAdapter 

9 

10if TYPE_CHECKING: 

11 from ..idaes_factory_context import IdaesFactoryContext 

12 

13 

14class _SectionAdapter(Protocol): 

15 def serialise(self, ctx: "IdaesFactoryContext", unit_model: Any) -> Any: 

16 ... 

17 

18 

19class UnitModelAdapter: 

20 """Serialise a Django unit operation into the schema sent to the IDAES service.""" 

21 

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 ) 

35 

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 )