Reader

Latest version: v3.17

Safety actively analyzes 714815 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 3 of 14

3.6

-----------

Released 2023-06-16

* Add documentation on :doc:`contributing`
and a detailed :ref:`roadmap`.
Thanks to `Katharine Jarmul <https://kjamistan.com/>`_
for finally getting me to do this.
(:issue:`60`)
* Document the low-level
:meth:`~reader._storage.Storage.delete_entries`
storage method.
(:issue:`301`, :issue:`96`)
* Update vendored ``reader._http_utils`` to werkzeug 2.3.5.

* Deprecate the :ref:`twitter` experimental plugin,
since the Twitter API does not have a (useful) free tier anymore.
(:issue:`310`)

.. attention::

The :ref:`twitter` plugin will be removed in version 3.7.

3.5

-----------

Released 2023-03-19

* Make :attr:`Entry.important` an *optional* boolean
defaulting to :const:`None`,
so one can express "explicitly unimportant" (*don't care*)
by setting it to :const:`False`.
This replaces the semantics for *don't care* introduced
in `version 2.2 <Version 2.2_>`_.
(:issue:`254`)

.. warning::

**This is a minor compatibility break**,
and should mostly affect code that checks identity
(``if entry.important is True: ...``);
code that uses :attr:`~Entry.important` in a boolean context
(``if entry.important: ...``)
should not be affected.

* :attr:`Entry.important` values will be migrated as follows::

if read and not important and important_modified:
important = False
elif not important:
important = None
else:
important = important

* The ``important`` argument of
:meth:`~Reader.get_entries`, :meth:`~Reader.search_entries`, etc.
can also take string literals for more precise filtering,
see :attr:`~reader.types.TristateFilterInput`.

* The :mod:`~reader.plugins.mark_as_read` plugin
does not set :attr:`~reader.Entry.read_modified` and
:attr:`~reader.Entry.important_modified` anymore.

* The web app uses the new *don't care* semantics.

* :meth:`~Reader.set_entry_read` and :meth:`~Reader.set_entry_important`
do not coerce the flag value to :class:`bool` anymore,
and require it to be :const:`True` or :const:`False` (or :const:`None`).

3.4

-----------

Released 2023-01-22

* Drop Python 3.8 support. (:issue:`298`)

* Document the parser :doc:`internal`.
(:issue:`235`, :issue:`255`)

* Fix ``preview_feed_list`` plugin,
broken by `3.3 <Version 3.3_>`_ parser refactoring.
(:issue:`299`)

3.3

-----------

Released 2022-12-19

This release marks *reader*'s `5th anniversary`_ and its 2000th commit.

.. attention::

This is the last release to support Python 3.8;
see :issue:`298` for details.

* Support Python 3.11. (:issue:`289`)

* Postpone update-related imports until needed.
Shortens time from process start to usable Reader instance by 3x
(imports are 72% faster). (:issue:`297`)

* Refactor parser internals. (:issue:`297`)

.. note::

Plugins using the (unstable) session hooks should replace::

reader._parser.session_hooks.request.append(...)
reader._parser.session_hooks.response.append(...)

with::

reader._parser.session_factory.request_hooks.append(...)
reader._parser.session_factory.response_hooks.append(...)

* :ref:`twitter` plugin:
don't fail when deserializing tweets with missing ``edit_history_tweet_ids``
(fails in tweepy 4.11, warns in tweepy >4.12).

.. _5th anniversary: https://github.com/lemon24/reader/commit/73ac0bd3b8d0e5429e0bd7caf5281e4c9c74f16d

3.2

-----------

Released 2022-09-14

* :class:`UpdatedFeed` changes:
added field :attr:`~UpdatedFeed.unmodified`
and property :attr:`~UpdatedFeed.total`;
fields :attr:`~UpdatedFeed.new` and :attr:`~UpdatedFeed.modified`
became optional.
(:issue:`96`)
* Fix bug in :mod:`~reader.plugins.entry_dedupe` causing updates to fail
if there were multiple *new* duplicates of the same entry.
(:issue:`292`)
* Fix bug in :mod:`~reader.plugins.readtime`
and :mod:`~reader.plugins.mark_as_read` causing updates to fail
if an entry was deleted by another plugin.
(:issue:`292`)
* Fix bug in :mod:`~reader.plugins.mark_as_read` causing updates to fail
if an entry had no title.
* In the CLI, don't suppress the traceback of :exc:`ReaderError`,
since it would also suppress it for bugs.
* In the CLI, stop using deprecated :func:`click.get_terminal_size`.

3.1

-----------

Released 2022-08-29

* Drop :mod:`~reader.plugins.readtime` plugin dependency
on `readtime <https://github.com/alanhamlett/readtime_>`_
(which has a transitive dependency on lxml,
which does not always have PyPy Windows wheels on PyPI).
The ``readtime`` extra is deprecated,
but remains available to avoid breaking dependent packages.
(:issue:`286`)
* Sort entries by added date most of the time,
with the exception of those imported on the first update.
Previously, entries would be sorted by added
only if they were published less than 7 days ago,
causing entries that appear in the feed months after their published
to never appear at the top (so the user would never see them).
(:issue:`279`)

Page 3 of 14

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.