Source code for intessa.conneg.default.xml

# -*- coding: utf-8 -*-

import lxml.etree
import lxml.objectify

from intessa.conneg.codec_base import Codec


[docs]class XMLCodec(Codec): """Default XML codec, using ``lxml.objectify``."""
[docs] def encode(media_type, etree, **params): ur""" Encode an lxml ``ElementTree`` using ``lxml.etree.tostring()``. By default, the output will include an XML prolog, and will be utf-8-encoded. This can be overridden by passing ``xml_declaration`` (``True`` or ``False``, default ``True``) and ``encoding`` (default ``'utf-8'``) keywords. See http://lxml.de/api/lxml.etree-module.html#tostring for a detailed overview of available options. >>> tree = lxml.etree.fromstring('<obj><attr>value</attr></obj>') >>> tree.find('attr').text = u"vålúè" >>> XMLCodec.encode('application/xml', tree) ('application/xml', "<?xml version='1.0' encoding='utf-8'?>\n<obj><attr>v\xc3\xa5l\xc3\xba\xc3\xa8</attr></obj>") """ params.setdefault('xml_declaration', True) params.setdefault('with_tail', False) if params['xml_declaration']: params.setdefault('encoding', 'utf-8') return (media_type, lxml.etree.tostring(etree, **params))
[docs] def decode(content_type, bytes): """ Decode an XML bytestring to a Python object, using ``lxml.objectify``. For more information on these objects, see http://lxml.de/objectify.html. >>> doc = XMLCodec.decode('application/xml', '<obj><attr>value</attr></obj>') >>> doc # doctest: +ELLIPSIS <Element obj at 0x...> >>> doc.tag 'obj' >>> doc.attr 'value' """ return lxml.objectify.fromstring(bytes)