Add array support to restxml
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user