-----------
Released 2023-08-20
* Drop Python 3.9 support. (:issue:`302`)
* Use :mod:`concurrent.futures` instead of :mod:`multiprocessing.dummy`
when :ref:`updating feeds <update>` in parallel;
:mod:`multiprocessing.dummy` does not work on some environments
(e.g. AWS Lambda).
* Wrap unexpected hook errors in :exc:`UpdateHookError`
instead of letting them bubble up,
so plugin-raised exceptions for one feed don't prevent updates for the others
during :meth:`~Reader.update_feeds_iter()` / :meth:`~Reader.update_feeds()`.
(:issue:`218`)
.. warning::
**This is a minor compatibility break**;
it is considered acceptable, since it fixes a bug / unexpected behavior.
* Add new exceptions :exc:`UpdateHookError`,
:exc:`SingleUpdateHookError`, and :exc:`UpdateHookErrorGroup`.
* Try to run all
:attr:`~Reader.after_entry_update_hooks`,
:attr:`~Reader.after_feed_update_hooks`, and
:attr:`~Reader.after_feeds_update_hooks`,
don’t stop after one fails.
* Add :exc:`UpdateError` as parent of all update-related exceptions. (:issue:`218`)
* Narrow down the error type of :attr:`UpdateResult.value`
from :exc:`ReaderError` to :exc:`UpdateError`.
* Make :exc:`ParseError` inherit from :exc:`UpdateError`.
* Document :meth:`~Reader.update_feeds_iter()`, :meth:`~Reader.update_feeds()`,
and :meth:`~Reader.update_feed()` can raise :exc:`UpdateError`\s
(other than :exc:`UpdateHookError` and :exc:`ParseError`).
* Make :exc:`ReaderWarning` inherit from :exc:`ReaderError`.
* Include a diagram of the :ref:`exctree` in the :doc:`api`.
* Add werkzeug dependency,
instead of vendoring selected :mod:`werkzeug.http` utilities.
* Rework lazy imports introduced in `version 3.3 <Version 3.3_>`_.
(:issue:`316`)
* Make :mod:`reader._parser` a package, and move parsing-related modules into it.
(:issue:`316`)