From 6ffa578b1bae4fb189dbcb39094fc8396ae72d77 Mon Sep 17 00:00:00 2001 From: Craig McDaniel Date: Wed, 9 Jan 2013 14:41:58 -0500 Subject: [PATCH 1/2] restxml empty string fixes --HG-- branch : empty_strings3 --- wsme/rest/xml.py | 7 +++++++ wsme/tests/protocol.py | 15 +++++++++++++++ wsme/tests/test_restxml.py | 4 ++++ wsme/tests/test_spore.py | 2 +- 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/wsme/rest/xml.py b/wsme/rest/xml.py index 331bbb0..6dd9b5b 100644 --- a/wsme/rest/xml.py +++ b/wsme/rest/xml.py @@ -203,6 +203,13 @@ def dict_fromxml(datatype, element): for item in element.findall('item'))) +@fromxml.when_object(unicode) +def unicode_fromxml(datatype, element): + if element.get('nil') == 'true': + return None + return datatype(element.text if element.text else '') + + @fromxml.when_object(datetime.date) def date_fromxml(datatype, element): if element.get('nil') == 'true': diff --git a/wsme/tests/protocol.py b/wsme/tests/protocol.py index bd5b9d9..4ad6948 100644 --- a/wsme/tests/protocol.py +++ b/wsme/tests/protocol.py @@ -176,6 +176,13 @@ class ArgTypes(object): assert type(value) == wsme.types.text return value + @expose(wsme.types.text) + @validate(wsme.types.text) + def settextnone(self, value): + print(repr(value)) + assert type(value) == type(None) + return value + @expose(bool) @validate(bool) def setbool(self, value): @@ -475,6 +482,14 @@ class ProtocolTestCase(unittest.TestCase): assert self.call('argtypes/settext', value=u('\xe3\x81\xae'), _rt=wsme.types.text) == u('\xe3\x81\xae') + def test_settext_empty(self): + assert self.call('argtypes/settext', value=u(''), + _rt=wsme.types.text) == u('') + + def test_settext_none(self): + assert self.call('argtypes/settextnone', value=None, + _rt=wsme.types.text) == None + def test_setint(self): r = self.call('argtypes/setint', value=3, _rt=int) assert r == 3, r diff --git a/wsme/tests/test_restxml.py b/wsme/tests/test_restxml.py index c96bb3e..8d3ef93 100644 --- a/wsme/tests/test_restxml.py +++ b/wsme/tests/test_restxml.py @@ -40,6 +40,8 @@ def dumpxml(key, obj, datatype=None): el.text = six.text_type(obj) elif type(obj) in (datetime.date, datetime.time, datetime.datetime): el.text = obj.isoformat() + elif type(obj) == type(None): + el.set('nil', 'true') elif hasattr(datatype, '_wsme_attributes'): for attr in datatype._wsme_attributes: name = attr.name @@ -98,6 +100,8 @@ def loadxml(el, datatype): return parse_isotime(el.text) if datatype == datetime.datetime: return parse_isodatetime(el.text) + if datatype == unicode: + return datatype(el.text if el.text else '') if datatype == bool: return el.text.lower() != 'false' if datatype is None: diff --git a/wsme/tests/test_spore.py b/wsme/tests/test_spore.py index 5bbab9c..4d0b0b9 100644 --- a/wsme/tests/test_spore.py +++ b/wsme/tests/test_spore.py @@ -18,7 +18,7 @@ class TestSpore(unittest.TestCase): spore = json.loads(spore) - assert len(spore['methods']) == 45, str(len(spore['methods'])) + assert len(spore['methods']) == 46, str(len(spore['methods'])) m = spore['methods']['argtypes_setbytesarray'] assert m['path'] == 'argtypes/setbytesarray', m['path'] From 6b51ec0dd0d83c1fed298e50cb8d3d7347c4284b Mon Sep 17 00:00:00 2001 From: Christophe de Vienne Date: Tue, 15 Jan 2013 12:07:26 +0100 Subject: [PATCH 2/2] Fix Python 3 compatibility --HG-- branch : empty_strings3 --- wsme/rest/xml.py | 4 ++-- wsme/tests/test_restxml.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/wsme/rest/xml.py b/wsme/rest/xml.py index 6dd9b5b..2d1b585 100644 --- a/wsme/rest/xml.py +++ b/wsme/rest/xml.py @@ -203,11 +203,11 @@ def dict_fromxml(datatype, element): for item in element.findall('item'))) -@fromxml.when_object(unicode) +@fromxml.when_object(wsme.types.text) def unicode_fromxml(datatype, element): if element.get('nil') == 'true': return None - return datatype(element.text if element.text else '') + return wsme.types.text(element.text) if element.text else six.u('') @fromxml.when_object(datetime.date) diff --git a/wsme/tests/test_restxml.py b/wsme/tests/test_restxml.py index 8d3ef93..e1c2641 100644 --- a/wsme/tests/test_restxml.py +++ b/wsme/tests/test_restxml.py @@ -100,8 +100,8 @@ def loadxml(el, datatype): return parse_isotime(el.text) if datatype == datetime.datetime: return parse_isodatetime(el.text) - if datatype == unicode: - return datatype(el.text if el.text else '') + if datatype == wsme.types.text: + return datatype(el.text if el.text else u('')) if datatype == bool: return el.text.lower() != 'false' if datatype is None: