This release brings significant changes that evolve delb to a mature level, namely:
- 🎇 All data keeping is now implemented natively without lxml, leading to remarkable performance improvements.
- 🎉 There's a new parser interface for extensiblity.
- 🪩 The API can be considered stable.
At least 99.5% of all code is guaranteed to be covered by tests. The accompanying integration test corpora have been updated and extended.
News
⚠️ For more clarity the symbols that are re-exported in the top-level moduledelbare greatly reduced. Instead they're to be imported from their domain specific modulesdelb.filters,delb.names,delb.nodesanddelb.utils. Some generally applicable ones will stay available for convenice though.- There are new abstract base classes for each node type rooting from
delb.typing.XMLNodeTypethat should be used for type annotations. ⚠️ Functions to construct new node instances such asdelb.nodes.new_tag_nodeare deprecated. The corresponding, concrete node classes are now to be instantiated directly.- A new parser interface allows the use of arbitrary parsing backends. Support for the standard library's
expatinterface andlxmlare contributed. For details see „Installation” anddelb.parser.ParserOptions. - When a used parser backend supports DTDs, it can be instructed with the
delb.parser.ParserOptions.load_referenced_resourcesoption to consider these. - New parsing related exceptions have been added:
delb.exceptions.ParsingErrorbasesdelb.exceptions.ParsingProcessingErroranddelb.exceptions.ParsingValidityError. ⚠️ Thedelb.parser.ParserOptions.resolve_entitiesoption has been removed entirely as delb's data model doesn't include any entities (that could stay unresolved in a document model).- The W3C's parser conformance test suite is included in delb's.
⚠️ delb.parse_treereplacesdelb.TagNode.parseto produce tag nodes from a serialized tree. The newdelb.parse_nodesproduces an iterator over (sub-)trees (possibly an XML document fragment).⚠️ The installation extrahttps-loaderis renamed toweb-loader⚠️ Theparser_optionsmust now be passed as keyword argument to adelb.Document.- A
source_urlcan now be passed explicitly when instantiating adelb.Document. ⚠️ Thedelb.nodes.TagNode.prefixattribute is gone.⚠️ Support for Python 3.8 & 3.9 was removed, for Python 3.14 it's added.
The package distributions are available at the Python Package Index.