Add array support to restxml

This commit is contained in:
Christophe de Vienne
2011-10-07 13:21:23 +02:00
parent cbd645fb7b
commit dba4451f74
2 changed files with 27 additions and 2 deletions

View File

@@ -46,6 +46,17 @@ def fromxml(datatype, element):
return datatype(element.text)
@toxml.when_type(list)
def array_toxml(datatype, key, value):
el = et.Element(key)
if value is None:
el.set('nil', 'true')
else:
for item in value:
el.append(toxml(datatype[0], 'item', item))
return el
@toxml.when_object(bool)
def bool_toxml(datatype, key, value):
el = et.Element(key)
@@ -86,6 +97,13 @@ def binary_toxml(datatype, key, value):
return el
@fromxml.when_type(list)
def array_fromxml(datatype, element):
if element.get('nil') == 'true':
return None
return [fromxml(datatype[0], item) for item in element.findall('item')]
@fromxml.when_object(datetime.date)
def date_fromxml(datatype, element):
return datetime.datetime.strptime(element.text, '%Y-%m-%d').date()

View File

@@ -17,7 +17,10 @@ def dumpxml(key, obj, datatype=None):
el = et.Element(key)
if isinstance(obj, tuple):
obj, datatype = obj
if datatype == wsme.types.binary:
if isinstance(datatype, list):
for item in obj:
el.append(dumpxml('item', item, datatype[0]))
elif datatype == wsme.types.binary:
el.text = base64.encodestring(obj)
elif isinstance(obj, basestring):
el.text = obj
@@ -39,7 +42,11 @@ def dumpxml(key, obj, datatype=None):
def loadxml(el, datatype):
print el, datatype, len(el)
if len(el):
if el.get('nil') == 'true':
return None
if isinstance(datatype, list):
return [loadxml(item, datatype[0]) for item in el.findall('item')]
elif len(el):
d = {}
for name, attr in datatype._wsme_attributes:
child = el.find(name)