From d05fb583eb94ea4fcb3302a7151ef2bad02ed957 Mon Sep 17 00:00:00 2001 From: Christophe de Vienne Date: Mon, 13 May 2013 18:14:11 +0200 Subject: [PATCH] Fix returning objects with object attributes set to 'None' --- wsme/rest/json.py | 2 ++ wsme/tests/protocol.py | 9 +++++++++ wsme/tests/test_restjson.py | 2 ++ wsmeext/tests/test_soap.py | 5 +++++ 4 files changed, 18 insertions(+) diff --git a/wsme/rest/json.py b/wsme/rest/json.py index 1b567d6..4edb899 100644 --- a/wsme/rest/json.py +++ b/wsme/rest/json.py @@ -45,6 +45,8 @@ def tojson(datatype, value): def myspecialtype_tojson(datatype, value): return str(value) """ + if value is None: + return None if wsme.types.iscomplex(datatype): d = dict() for attr in wsme.types.list_attributes(datatype): diff --git a/wsme/tests/protocol.py b/wsme/tests/protocol.py index 39f4caf..6c34773 100644 --- a/wsme/tests/protocol.py +++ b/wsme/tests/protocol.py @@ -574,6 +574,15 @@ class ProtocolTestCase(unittest.TestCase): _rt=NestedOuter) self.assertEquals(r, value) + def test_setnested_nullobj(self): + value = {'inner': None} + r = self.call( + 'argtypes/setnested', + value=(value, NestedOuter), + _rt=NestedOuter + ) + self.assertEquals(r, value) + def test_setbytesarray(self): value = [b("1"), b("2"), b("three")] r = self.call('argtypes/setbytesarray', diff --git a/wsme/tests/test_restjson.py b/wsme/tests/test_restjson.py index e229c94..130c765 100644 --- a/wsme/tests/test_restjson.py +++ b/wsme/tests/test_restjson.py @@ -47,6 +47,8 @@ def prepare_value(value, datatype): def prepare_result(value, datatype): print(value, datatype) + if value is None: + return None if datatype == wsme.types.binary: return base64.decodestring(value.encode('ascii')) if isusertype(datatype): diff --git a/wsmeext/tests/test_soap.py b/wsmeext/tests/test_soap.py index 1ade703..90f91ac 100644 --- a/wsmeext/tests/test_soap.py +++ b/wsmeext/tests/test_soap.py @@ -172,6 +172,8 @@ def tosuds(client, value): value, datatype = value else: datatype = type(value) + if value is None: + return None if isinstance(datatype, list): if datatype[0] in array_types: tname = array_types[datatype[0]] @@ -416,3 +418,6 @@ class TestSOAP(wsme.tests.protocol.ProtocolTestCase): def test_return_objectdictattribute(self): pass + + def test_setnested_nullobj(self): + pass # TODO write a soap adapted version of this test.