diff --git a/src/context/service/database/Link.py b/src/context/service/database/Link.py index 4ca3cee68e45cc9b5a8f4e0d9f1b07a3ec39f268..e2060c4542bebad82b1ed83dbcce612114862ae7 100644 --- a/src/context/service/database/Link.py +++ b/src/context/service/database/Link.py @@ -102,14 +102,17 @@ def link_set(db_engine : Engine, messagebroker : MessageBroker, request : Link) total_capacity_gbps, used_capacity_gbps = None, None if request.HasField('attributes'): attributes = request.attributes + # In proto3, HasField() does not work for scalar fields, using ListFields() instead. attribute_names = set([field.name for field,_ in attributes.ListFields()]) + if 'total_capacity_gbps' in attribute_names: total_capacity_gbps = attributes.total_capacity_gbps + if 'used_capacity_gbps' in attribute_names: used_capacity_gbps = attributes.used_capacity_gbps - elif total_capacity_gbps is not None: - used_capacity_gbps = total_capacity_gbps + else: + used_capacity_gbps = 0.0 link_data = [{ 'link_uuid' : link_uuid, diff --git a/src/context/tests/test_link.py b/src/context/tests/test_link.py index 8b07f0230cc12add4ab0f2db78f3663cb021ca3a..5b5abb0d53d25778c0e5cd11b7d97c4a35746a4e 100644 --- a/src/context/tests/test_link.py +++ b/src/context/tests/test_link.py @@ -100,8 +100,13 @@ def test_link(context_client : ContextClient) -> None: attribute_names = set([field.name for field,_ in response.attributes.ListFields()]) assert 'total_capacity_gbps' in attribute_names assert abs(response.attributes.total_capacity_gbps - 100) < 1.e-12 - assert 'used_capacity_gbps' in attribute_names - assert abs(response.attributes.used_capacity_gbps - response.attributes.total_capacity_gbps) < 1.e-12 + assert ( + ('used_capacity_gbps' not in attribute_names) or ( + ('used_capacity_gbps' in attribute_names) and ( + abs(response.attributes.used_capacity_gbps - response.attributes.total_capacity_gbps) < 1.e-12 + ) + ) + ) # ----- List when the object exists -------------------------------------------------------------------------------- response = context_client.ListLinkIds(Empty())