From f5237f4967daf185bd1fb6126fdef0ea45922bf6 Mon Sep 17 00:00:00 2001 From: Ashraf Almohagry Date: Thu, 9 Jul 2026 17:36:03 +0200 Subject: [PATCH 1/3] fix pipe mapper message for diameter --- .../esdl_asset_mappers/pipe_mapper.py | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py b/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py index 3ab12336..447bed8b 100644 --- a/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py +++ b/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py @@ -13,6 +13,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . """Module containing the Esdl to Pipe asset mapper class.""" + import logging from typing import Any @@ -102,26 +103,26 @@ def _get_diameter(esdl_asset: EsdlAssetObject) -> float: the insulation schedule must be provided; in this case, it is assumed to be 1. """ - inner_diameter = esdl_asset.get_property("innerDiameter", 0) - dn_diameter = esdl_asset.get_property("diameter", None) # Use default schedule since schedule is not a valid ESDL Pipe attribute # TODO add method to get schedule from esdl if it becomes available. schedule = PIPE_DEFAULTS.default_schedule - if inner_diameter == 0: - if dn_diameter is not None: - esdl_object = EsdlAssetPipeMapper._get_esdl_object_from_edr( - dn_diameter.name, schedule - ) - logger.info( - f"Property innerDiameter is not set for: {esdl_asset.get_name()}, " - f"Schedule S1 is assumed for retrieval of pipe diameter from EDR list." - ) - return float(esdl_object.innerDiameter) - else: - return PIPE_DEFAULTS.diameter - else: - return float(inner_diameter) + has_inner_diameter = esdl_asset.esdl_asset.eIsSet("innerDiameter") + has_dn_diameter = esdl_asset.esdl_asset.eIsSet("diameter") + + if not has_inner_diameter and not has_dn_diameter: + return float(esdl_asset.get_property("diameter", PIPE_DEFAULTS.diameter)) + + if has_inner_diameter: + return float(esdl_asset.get_property("innerDiameter", PIPE_DEFAULTS.diameter)) + + dn_diameter = esdl_asset.get_property("diameter", PIPE_DEFAULTS.diameter) + esdl_object = EsdlAssetPipeMapper._get_esdl_object_from_edr(dn_diameter.name, schedule) + logger.info( + f"Property innerDiameter is not set for: {esdl_asset.get_name()}, " + f"Schedule S1 is assumed for retrieval of pipe diameter from EDR list." + ) + return float(esdl_object.innerDiameter) @staticmethod def _get_esdl_object_from_edr( From 9fd402a1cd86808a9868e99b55befe7873985026 Mon Sep 17 00:00:00 2001 From: Ashraf Almohagry Date: Fri, 10 Jul 2026 10:05:35 +0200 Subject: [PATCH 2/3] update tests. --- .../transforms/esdl_asset_mappers/pipe_mapper.py | 13 +++++-------- .../test_esdl_asset_pipe_mapper.py | 7 +++++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py b/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py index 447bed8b..4c72c7aa 100644 --- a/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py +++ b/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py @@ -107,20 +107,17 @@ def _get_diameter(esdl_asset: EsdlAssetObject) -> float: # TODO add method to get schedule from esdl if it becomes available. schedule = PIPE_DEFAULTS.default_schedule - has_inner_diameter = esdl_asset.esdl_asset.eIsSet("innerDiameter") - has_dn_diameter = esdl_asset.esdl_asset.eIsSet("diameter") - - if not has_inner_diameter and not has_dn_diameter: - return float(esdl_asset.get_property("diameter", PIPE_DEFAULTS.diameter)) - - if has_inner_diameter: + if esdl_asset.esdl_asset.eIsSet("innerDiameter"): return float(esdl_asset.get_property("innerDiameter", PIPE_DEFAULTS.diameter)) dn_diameter = esdl_asset.get_property("diameter", PIPE_DEFAULTS.diameter) + if dn_diameter is PIPE_DEFAULTS.diameter: + return PIPE_DEFAULTS.diameter + esdl_object = EsdlAssetPipeMapper._get_esdl_object_from_edr(dn_diameter.name, schedule) logger.info( f"Property innerDiameter is not set for: {esdl_asset.get_name()}, " - f"Schedule S1 is assumed for retrieval of pipe diameter from EDR list." + f"Schedule S1 is assumed for retrieval of pipe inner diameter from EDR list." ) return float(esdl_object.innerDiameter) diff --git a/unit_test/adapters/transforms/esdl_asset_mappers/test_esdl_asset_pipe_mapper.py b/unit_test/adapters/transforms/esdl_asset_mappers/test_esdl_asset_pipe_mapper.py index f167aa13..06a177bb 100644 --- a/unit_test/adapters/transforms/esdl_asset_mappers/test_esdl_asset_pipe_mapper.py +++ b/unit_test/adapters/transforms/esdl_asset_mappers/test_esdl_asset_pipe_mapper.py @@ -14,6 +14,7 @@ # along with this program. If not, see . """Test pipe mapper.""" + import typing import unittest from pathlib import Path @@ -138,6 +139,7 @@ def mock_get_property(key, default=None): return default esdl_asset_mock.get_property = mock_get_property + esdl_asset_mock.esdl_asset.eIsSet.side_effect = lambda key: key == "innerDiameter" # Act diameter = EsdlAssetPipeMapper._get_diameter(esdl_asset_mock) @@ -160,6 +162,7 @@ def mock_get_property(key, default=None): return default esdl_asset_mock.get_property = mock_get_property + esdl_asset_mock.esdl_asset.eIsSet.side_effect = lambda key: key == "diameter" edr_object_mock = Mock() edr_object_mock.innerDiameter = 0.42 @@ -180,11 +183,10 @@ def test_get_diameter_default_when_none_provided(self): def mock_get_property(key, default=None): if key == "innerDiameter": return 0 - if key == "diameter": - return None return default esdl_asset_mock.get_property = mock_get_property + esdl_asset_mock.esdl_asset.eIsSet.return_value = False # Act diameter = EsdlAssetPipeMapper._get_diameter(esdl_asset_mock) @@ -224,6 +226,7 @@ def mock_get_property(key, default=None): return default esdl_asset_mock.get_property = mock_get_property + esdl_asset_mock.esdl_asset.eIsSet.side_effect = lambda key: key == "diameter" edr_object_mock = Mock() edr_object_mock.innerDiameter = 0.08 From 1159a57ddaadc0745c3361c76f82d549db007d98 Mon Sep 17 00:00:00 2001 From: Ashraf Almohagry Date: Fri, 10 Jul 2026 10:32:59 +0200 Subject: [PATCH 3/3] updated to deal with inner diameter value of 0.0 --- .../esdl_asset_mappers/pipe_mapper.py | 4 ++- .../test_esdl_asset_pipe_mapper.py | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py b/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py index 4c72c7aa..041ea135 100644 --- a/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py +++ b/src/omotes_simulator_core/adapter/transforms/esdl_asset_mappers/pipe_mapper.py @@ -108,7 +108,9 @@ def _get_diameter(esdl_asset: EsdlAssetObject) -> float: schedule = PIPE_DEFAULTS.default_schedule if esdl_asset.esdl_asset.eIsSet("innerDiameter"): - return float(esdl_asset.get_property("innerDiameter", PIPE_DEFAULTS.diameter)) + inner_diameter = float(esdl_asset.get_property("innerDiameter", PIPE_DEFAULTS.diameter)) + if inner_diameter != 0: + return inner_diameter dn_diameter = esdl_asset.get_property("diameter", PIPE_DEFAULTS.diameter) if dn_diameter is PIPE_DEFAULTS.diameter: diff --git a/unit_test/adapters/transforms/esdl_asset_mappers/test_esdl_asset_pipe_mapper.py b/unit_test/adapters/transforms/esdl_asset_mappers/test_esdl_asset_pipe_mapper.py index 06a177bb..6167e29b 100644 --- a/unit_test/adapters/transforms/esdl_asset_mappers/test_esdl_asset_pipe_mapper.py +++ b/unit_test/adapters/transforms/esdl_asset_mappers/test_esdl_asset_pipe_mapper.py @@ -175,6 +175,37 @@ def mock_get_property(key, default=None): # Assert self.assertEqual(diameter, 0.42) + def test_get_diameter_with_inner_diameter_zero_uses_edr(self): + """Falls back to EDR when innerDiameter is set to 0 but a DN diameter is provided.""" + # Arrange + esdl_asset_mock = Mock() + dn_mock = Mock() + dn_mock.name = "DN125" + + def mock_get_property(key, default=None): + if key == "innerDiameter": + return 0 + if key == "diameter": + return dn_mock + return default + + esdl_asset_mock.get_property = mock_get_property + esdl_asset_mock.esdl_asset.eIsSet.side_effect = lambda key: key in ( + "innerDiameter", + "diameter", + ) + edr_object_mock = Mock() + edr_object_mock.innerDiameter = 0.1273 + + with patch.object( + EsdlAssetPipeMapper, "_get_esdl_object_from_edr", return_value=edr_object_mock + ): + # Act + diameter = EsdlAssetPipeMapper._get_diameter(esdl_asset_mock) + + # Assert + self.assertEqual(diameter, 0.1273) + def test_get_diameter_default_when_none_provided(self): """Returns default diameter when both innerDiameter is 0 and diameter is None.""" # Arrange