Skip to main content

Wrapper for ``lxml`` trees which serializes to string upon iteration.

Project description

Overview

This package provides a wrapper for lxml trees which serializes to string on iteration, but otherwise makes the tree available in an attribute.

The primary for this is WSGI middleware which may avoid needless XML parsing and serialization.

Usage

It’s recommend to use the lazy decorator on your application method. This allows you to return an lxml tree object, which is then automatically turned into an XMLSerializer.

>>> from repoze.xmliter import lazy
>>> @lazy
... def application(environ, start_response)
...     return some_lxml_tree

You may provide a serializer function, which will be used when the XMLSerializer is eventually iterated over (i.e. when the response is rendered):

>>> @lazy(serializer=lxml.html.tostring)
... def application(environ, start_response)
...     return some_lxml_tree

Middleware can use isinstance to test if the result is an XML iterable:

>>> from repoze.xmliter.serializer import XMLSerializer
>>> isinstance(result, XMLSerializer)

In this case, the middleware can simply access the tree attribute of the result.

There are two convenience methods which can be used to parse a WSGI iterable of strings and build an XMLSerializer object, but avoids re-building the serializer if the input iterable is already an instance of XMLSerializer:

>>> from repoze.xmliter.utils import getXMLSerializer
>>> result = getXMLSerializer(result)

Or, if you are parsing HTML:

>>> from repoze.xmliter.utils import getHTMLSerializer
>>> result = getHTMLSerializer(result)

If result is not an XMLSerializer, it will be parsed using a feed parser, turned into an lxml tree, and wrapped up in an XMLSerializer, which is returned.

Changelog

1.0 (2025-10-29)

  • Add support for Python 3.8 - 3.14. [maurits]

  • Drop support for Python 3.7: it is almost two years out of support and cannot easily be tested. [maurits]

1.0b1 (2024-01-31)

  • Fix serialization of a tree to bytes PR. [maurits]

  • Removed unused future dependency. Fixes issue 10. [maurits]

  • Drop support for Python 2.6, 2.7, 3.3, 3.4, 3.5, and 3.6. [tseaver, mborch]

  • Add support for Python 3.7, 3.8, 3.9, 3.10, and 3.11. [tseaver, mborch]

0.6.1 (2022-01-14)

  • Fixed tests with lxml 4.7.1 or higher. Fixes issue 8. [maurits]

0.6 - 2014-09-21

  • Python 3 compatibility [Lennart Regebro]

0.5 - 2012-01-25

  • Add __len__ to serializer to help WSGI servers. [Laurence]

  • Serializer should iter the entire string in one go. [Laurence]

0.4 - 2011-06-16

  • Ensure trailing space is removed when replacing doctype with empty string. [Laurence]

0.3 - 2011-06-03

  • Add doctype option to replace doctype on serialization. [Laurence]

0.2 - 2010-09-11

  • Use document encoding by default. (This fixes test failure on Ubuntu 10.04.) [Laurence]

  • Defer to xsl:output settings when serializing an XSLResultTree. [Laurence]

  • Turn off pretty printing by default for HTML to avoid affecting rendering on the browser. [Laurence]

0.1 - 2010-04-21

  • Initial release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

repoze_xmliter-1.0.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

repoze_xmliter-1.0-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file repoze_xmliter-1.0.tar.gz.

File metadata

  • Download URL: repoze_xmliter-1.0.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.4

File hashes

Hashes for repoze_xmliter-1.0.tar.gz
Algorithm Hash digest
SHA256 56f9a3e3ab27254b517adc6bc86e47130b78c6a160126c0d76ce4a3485f22b6e
MD5 a57226902acd950a0ae876b95c594724
BLAKE2b-256 526e680542cb163eebf08dcd10c6c20e63ec831c683eb0781ae1c5859c935687

See more details on using hashes here.

File details

Details for the file repoze_xmliter-1.0-py3-none-any.whl.

File metadata

  • Download URL: repoze_xmliter-1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.4

File hashes

Hashes for repoze_xmliter-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dc149b856896b111e75544f70f0ed3e05f2e96a274345ca4b72935ea26d1e7ca
MD5 26f438f952605b1ed43a1243a6029bba
BLAKE2b-256 b5762693e1f4ecfe667340ac1aff6694de760e4cde82df2a439fbc2fa6164c2a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page