in alibabacloud_oss_v2/serde.py [0:0]
def deserialize_output_xmlbody(result: Model, op_output: OperationOutput) -> Model:
"""deserialize output xmlbody
"""
xml_data = op_output.http_response.content
if xml_data is None or len(xml_data) == 0:
return result
# parser xml body
attributes = cast(Dict, getattr(result, '_attribute_map'))
xml_fields = []
xml_roots = []
for attr, attr_desc in attributes.items():
if attr_desc.get('tag', '') == 'xml':
xml_fields.append(attr)
if (attr_desc.get('tag', '') == 'output' and
attr_desc.get('position', '') == 'body' and
'xml' in attr_desc.get('type', '')):
xml_roots.append(attr)
if len(xml_fields) > 0:
xml_map = cast(Dict, getattr(result, '_xml_map', {}))
deserialize_xml(xml_data, result, expect_tag=xml_map.get('name', None))
elif len(xml_roots) > 0:
attr = xml_roots[0]
attr_desc = attributes.get(attr)
attr_types = cast(str, attr_desc.get('type')).split(',')
obj = result._Model__create_depend_object( # pylint: disable=protected-access
attr_types[0])
if obj is None:
raise exceptions.DeserializationError(
error=f'Can not create object with {attr_types} type')
expect_tag = attr_desc.get('rename', None)
deserialize_xml(xml_data, obj, expect_tag=expect_tag)
setattr(result, attr, obj)
return result