tocdepth: | 2 |
---|
Every time I thought I'd got it made
It seemed the taste was not so sweet
The listed updates resemble rather a Best Of than a full record of changes. Intentionally.
This iteration took quiet long to complete as it presumably solved the hardest
problem on the way to shed off the essential dependency on lxml
, also
resulting in human-friendly serializations that achieve unprecedented clarity.
The library's robustness is now proven with integration tests that are verified
against eleven diverse TEI encoded corpora that sum up to more than 360k
documents with a total volume of 3.33 GB.
- delb is now autonomously serializing contents, the :doc:`api/serialization` chapter details current capabilities and interfaces.
- The HTML documentation received a big revision for pleasant discovery and reading.
- Methods that add nodes to a tree now return the added concrete nodes.
- The new :func:`delb.compare_trees` is available to compare nested contents.
⚠️ :attr:`delb.ParserOptions.collapse_whitespace` was renamed to :attr:`delb.ParserOptions.reduce_whitespace`, as there is now :meth:`delb.Document.reduce_whitespace` to reflect that they also trim excessive whitespace.⚠️ The Xpath evaluation expressions of absolute paths on the child axis in the first location step is fixed. Consider to double check your usages.⚠️ :attr:`delb.Document.head_nodes` was renamed to :attr:`delb.Document.prologue`, :attr:`delb.Document.tail_nodes` to :attr:`delb.Document.epilogue`.⚠️ :func:`delb.get_traverser` now only accepts keyword arguments.⚠️ Support for Python 3.7 was removed.- Support for Python 3.12 and 3.13 was added.
⚠️ The :func:`_delb.plugins.core_loaders.etree_loader` is marked as deprecated.
Previously deprecated contents have been removed.
- delb now uses its own XPath implementation, please investigate :mod:`_delb.xpath` for details.
⚠️ Many of the nodes' methods that relate to relative nodes have been renamed. Watch out for :class:`DeprecationWarning`s!⚠️ The method :meth:`delb.NodeBase.iterate_descendants` is added as a replacement for the former :meth:`delb.NodeBase.child_nodes` invoked with the now deprecated argumentrecurse
.⚠️ Thehttps-loader
extension is now required for loading documents via plain and secured HTTP connections.- Under the hood httpx is now employed as HTTP/S client.
⚠️ The contributed loader for FTP connections is marked as deprecated.⚠️ Theparser
argument to :class:`delb.Document` and :meth:`delb.TagNode.parse` is deprecated and replaced byparser_options
.⚠️ :meth:`delb.Document.xslt` is marked as deprecated.⚠️ Evoked exceptions changed in various places.⚠️ Document mixin extensions are now facilitated by subclassing :class:`_delb.plugins.DocumentMixinBase`. It replaces :class:`_delb.plugins.DocumentExtensionHooks` and :meth:`_delb.plugins.PluginManager.register_document_mixin` without a backward-compatible mechanic.- Support for the very good Python 3.10 and the even better 3.11 is added.
- The code repository is now part of an umbrella namespace for related projects: https://github.com/delb-xml/
- A
CITATION.cff
is available in the repository and shipped with source distributions for researchers that are citing their employed software.
- Adds the :meth:`delb.TagNode.fetch_or_create_by_xpath` method.
⚠️ Because of that a pre-mature parser of XPath expressions has been implemented and you can expect some expressions to cause failures, e.g. with functions that take more than one argument.
- Subclasses of :class:`delb.Document` can claim to be the default class based
on the evaluation of a document's content and configuration by implementing
__class_test__
. ⚠️ :meth:`_delb.plugins.PluginManager._register_document_extension` is renamed to :meth:`_delb.plugins.PluginManager._register_document_mixin`.⚠️ :meth:`_delb.plugins.DocumentExtensionHooks` is renamed to :meth:`_delb.plugins.DocumentMixinHooks`.⚠️ :meth:`_delb.plugins.DocumentMixinHooks._init_config` is now a :func:`classmethod` and now also takes the config namespace as first argument.- Adds :meth:`delb.Document.collapse_whitespace` and the initialization option for :class:`delb.Document` instances with the same name.
- Adds the
retain_child_nodes
argument to :meth:`delb.NodeBase.detach`. - Adds the :attr:`delb.NodeBase.last_descendant` property.
- Adds the :attr:`delb.TagNode.id` property.
- Adds the :meth:`delb.TagNode.parse` method.
⚠️ :meth:`TagNode.qualified_name` is marked deprecated and the same property is now available as :meth:`TagNode.universal_name`.- Adds support for Python 3.9 & 3.10.
⚠️ Drops support for Python 3.6- Uses GitHub actions for CI checks.
- Detached :class:`delb.TagNode` s now drop references to :class:`delb.TextNode` siblings.
- Ensures that :attr:`delb.TagNode.location_path` always consists of indexed
steps (
/*[i]
) only. - Avoids hitting the interpreter's recursion limit when iterating in stream dimension.
- Adds a logo. Gracious thanks to sm!
- Adds :doc:`plugin mechanics </api/extending>`. Graciae ad infinitum, TC!
- CSS and XPath query results are wrapped in :class:`delb.QueryResults`.
- Adds :attr:`delb.Document.head_nodes` and :attr:`delb.Document.tail_nodes` that allow access to the siblings of a root node.
- Adds the :attr:`delb.Document.source_url` property.
- Adds :func:`delb.get_traverser` and two traverser implementations that yield nodes related to a root node according to their defined order.
- Document loaders report back the reason why they would or could not load a document from the given object.
- Various documentation improvements, including table of contents for class members.
There's nothing super-exciting to report here. It's just getting better.
This was quiet boring, it serves updated dependencies for what it's worth.
The initial release with a set and sound data model and API.