def deserialize_output_xmlbody()

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