Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions aas_http_client/utilities/sdk_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,32 +27,36 @@ def get_submodel_ids(shell: model.AssetAdministrationShell) -> list[str]:
return submodel_ids


def add_submodel_to_aas(aas: model.AssetAdministrationShell, submodel: model.Submodel) -> None:
def add_submodel_to_aas(aas: model.AssetAdministrationShell, submodel: model.Submodel) -> bool:
"""Add a given Submodel correctly to a provided AssetAdministrationShell.

:param aas: provided AssetAdministrationShell to which the Submodel should be added
:param submodel: given Submodel to add
:return: True if the Submodel was added, False if it was already referenced
"""
existing_submodel_ids = get_submodel_ids(aas)
if submodel.id in existing_submodel_ids:
_logger.warning(f"Submodel with ID {submodel.id} is already referenced in the AAS. Skipping addition.")
return
return False

aas.submodel.add(model.ModelReference.from_referable(submodel))
return True


def remove_submodel_from_aas(aas: model.AssetAdministrationShell, submodel: model.Submodel) -> None:
def remove_submodel_from_aas(aas: model.AssetAdministrationShell, submodel: model.Submodel) -> bool:
"""Remove a given Submodel correctly from a provided AssetAdministrationShell.

:param aas: provided AssetAdministrationShell from which the Submodel should be removed
:param submodel: given Submodel to remove
:return: True if the Submodel was removed, False if it was not referenced
"""
existing_submodel_ids = get_submodel_ids(aas)
if submodel.id not in existing_submodel_ids:
_logger.warning(f"Submodel with ID {submodel.id} is not referenced in the AAS. Skipping removal.")
return
return False

aas.submodel.remove(model.ModelReference.from_referable(submodel))
return True


def convert_to_object(content: dict) -> Any | None:
Expand Down
12 changes: 8 additions & 4 deletions tests/test_sdk_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ def shared_aas() -> model.AssetAdministrationShell:
def test_001a_add_sm_to_shell(shared_aas: model.AssetAdministrationShell, shared_sm: model.Submodel):
assert len(shared_aas.submodel) == 0

sdk_tools.add_submodel_to_aas(shared_aas, shared_sm)
result = sdk_tools.add_submodel_to_aas(shared_aas, shared_sm)
assert result is True
assert len(shared_aas.submodel) == 1

assert shared_sm.id in sdk_tools.get_submodel_ids(shared_aas)
Expand All @@ -35,17 +36,20 @@ def test_001a_add_sm_to_shell(shared_aas: model.AssetAdministrationShell, shared
def test_001b_add_sm_to_shell(shared_aas: model.AssetAdministrationShell, shared_sm: model.Submodel):
assert len(shared_aas.submodel) == 1

sdk_tools.add_submodel_to_aas(shared_aas, shared_sm)
result = sdk_tools.add_submodel_to_aas(shared_aas, shared_sm)
assert result is False
assert len(shared_aas.submodel) == 1

def test_002a_remove_sm_from_shell(shared_aas: model.AssetAdministrationShell, shared_sm_temp: model.Submodel):
assert len(shared_aas.submodel) == 1

sdk_tools.remove_submodel_from_aas(shared_aas, shared_sm_temp)
result = sdk_tools.remove_submodel_from_aas(shared_aas, shared_sm_temp)
assert result is False
assert len(shared_aas.submodel) == 1

def test_002b_remove_sm_from_shell(shared_aas: model.AssetAdministrationShell, shared_sm: model.Submodel):
assert len(shared_aas.submodel) == 1

sdk_tools.remove_submodel_from_aas(shared_aas, shared_sm)
result = sdk_tools.remove_submodel_from_aas(shared_aas, shared_sm)
assert result is True
assert len(shared_aas.submodel) == 0