From d129eaadb906aa72a9d9efa6c7304089b088896b Mon Sep 17 00:00:00 2001 From: manuelseeger Date: Thu, 30 Nov 2023 11:00:59 +0100 Subject: [PATCH 1/2] Fix #262 Deferred nav properties were instantiated as entity proxies. With this change only expanded nav properties are instantiated. --- pyodata/v2/service.py | 2 +- tests/test_service_v2.py | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/pyodata/v2/service.py b/pyodata/v2/service.py index e84d2f75..0ed77411 100644 --- a/pyodata/v2/service.py +++ b/pyodata/v2/service.py @@ -876,7 +876,7 @@ def __init__(self, service, entity_set, entity_type, proprties=None, entity_key= # available entities are serialized in results array for entity in proprties[prop.name]['results']: self._cache[prop.name].append(EntityProxy(service, None, prop_etype, entity)) - else: + elif isinstance(proprties[prop.name], list): for entity in proprties[prop.name]: self._cache[prop.name].append(EntityProxy(service, None, prop_etype, entity)) else: diff --git a/tests/test_service_v2.py b/tests/test_service_v2.py index bc4e0e37..be30bd64 100644 --- a/tests/test_service_v2.py +++ b/tests/test_service_v2.py @@ -883,6 +883,38 @@ def test_get_entities(service): assert empls[0].NameFirst == 'Yennefer' assert empls[0].NameLast == 'De Vengerberg' +@responses.activate +def test_get_entities_with_deferred_nav_prop(service): + """Get entities""" + + # pylint: disable=redefined-outer-name + + responses.add( + responses.GET, + f"{service.url}/Employees", + json={'d': { + 'results': [ + { + 'ID': 669, + 'NameFirst': 'Yennefer', + 'NameLast': 'De Vengerberg', + 'Addresses': { + '__deferred': {'uri': "https://remote.url/Employees(23)/Addresses"} + } + } + ] + }}, + status=200) + + request = service.entity_sets.Employees.get_entities() + + assert isinstance(request, pyodata.v2.service.QueryRequest) + + empls = request.execute() + assert empls[0].ID == 669 + assert empls[0].NameFirst == 'Yennefer' + assert empls[0].NameLast == 'De Vengerberg' + assert len(empls[0].Addresses) == 0 @responses.activate def test_get_null_value_from_null_preserving_service(service_retain_null): @@ -1533,7 +1565,6 @@ def test_get_entity_expanded(service): 'City': 'London' } ] - }}, status=200) @@ -1549,6 +1580,7 @@ def test_get_entity_expanded(service): assert emp.Addresses[0].ID == 456 assert emp.Addresses[0].Street == 'Baker Street' assert emp.Addresses[0].City == 'London' + @responses.activate def test_batch_request(service): From 42a4017224e01deae90cce866948fea760e27d77 Mon Sep 17 00:00:00 2001 From: manuelseeger Date: Thu, 30 Nov 2023 11:34:00 +0100 Subject: [PATCH 2/2] Expand comment on new test --- tests/test_service_v2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_service_v2.py b/tests/test_service_v2.py index be30bd64..f0d5bc54 100644 --- a/tests/test_service_v2.py +++ b/tests/test_service_v2.py @@ -885,7 +885,7 @@ def test_get_entities(service): @responses.activate def test_get_entities_with_deferred_nav_prop(service): - """Get entities""" + """Get entities but don't include deferred navigation property""" # pylint: disable=redefined-outer-name