Changelog History
Page 2
-
v2.11 Changes
๐ Released 2022-03-17
- ๐ Fix issue causing :func:
make_reader
to fail with messagedatabase requirement error: required SQLite compile options missing: ['ENABLE_JSON1']
when using SQLite 3.38 or newer. (:issue:273
)
- ๐ Fix issue causing :func:
-
v2.10 Changes
๐ Released 2022-03-12
๐ Support entry and global tags. (:issue:
272
, :issue:228
, :issue:267
)โ Remove :meth:
~Reader.get_tags()
support for the(None,)
(any feed) and :const:None
(any resource) wildcard resource values.
.. warning::
**This is a minor compatibility break**, but is unlikely to affect existing users; the usefulness of the wildcards was limited, because it was impossible to tell to which resource a (key, value) pair belongs.
๐ Allow passing a
(feed URL,)
1-tuple anywhere a feed URL can be passed to a :class:Reader
method.โ Remove the
global_metadata
experimental plugin (superseded by global tags).๐ In the web application, support editing entry and global metadata. Fix broken delete metadata button. Fix broken error flashing.
-
v2.9 Changes
๐ Released 2022-02-07
โฌ Decrease :meth:
~Reader.update_feeds()
memory usage by ~35% (using the maxrss before the call as baseline; overall process maxrss decreases by ~20%). The improvement is not in reader code, but in feedparser; reader will temporarily vendor feedparser until the fix makes it upstream and is released on PyPI. (:issue:265
)๐ In the web application, allow sorting feeds by the number of entries: important, unread, per day during the last 1, 3, 12 months. (:issue:
249
, :issue:245
).
-
v2.8 Changes
๐ Released 2022-01-22
- โ Add generic tag methods
:meth:
~Reader.get_tags
, :meth:~Reader.get_tag_keys
, :meth:~Reader.get_tag
, :meth:~Reader.set_tag
, and :meth:~Reader.delete_tag
, providing a unified interface for accessing tags as key-value pairs. (:issue:266
)
Add the :exc:
TagError
, :exc:TagNotFoundError
, and :exc:ResourceNotFoundError
exceptions.๐ Deprecate feed-specific tag and metadata methods (:issue:
266
):- :meth:
~Reader.get_feed_metadata
, use :meth:~Reader.get_tags
instead - :meth:
~Reader.get_feed_metadata_item
, use :meth:~Reader.get_tag
instead - :meth:
~Reader.set_feed_metadata_item
, use :meth:~Reader.set_tag
instead - :meth:
~Reader.delete_feed_metadata_item
, use :meth:~Reader.delete_tag
instead - :meth:
~Reader.get_feed_tags
, use :meth:~Reader.get_tag_keys
instead - :meth:
~Reader.add_feed_tag
, use :meth:~Reader.set_tag
instead - :meth:
~Reader.remove_feed_tag
, use :meth:~Reader.delete_tag
instead
- :meth:
Deprecate :exc:
MetadataError
, :exc:MetadataNotFoundError
, and :exc:FeedMetadataNotFoundError
.All deprecated methods/exceptions will be removed in version 3.0.
- Add the
missing_ok
argument to :meth:~Reader.delete_feed
and :meth:~Reader.delete_entry
. Add the
exist_ok
argument to :meth:~Reader.add_feed
.๐ In the web application, show maxrss when debug is enabled. (:issue:
269
)๐ In the web application, decrease memory usage of the entries page when there are a lot of entries (e.g. for 2.5k entries, maxrss decreased from 115 MiB to 75 MiB), at the expense of making "entries for feed" slightly slower. (:issue:
269
)
- โ Add generic tag methods
:meth:
-
v2.7 Changes
๐ Released 2022-01-04
- ๐ท Tags and metadata now share the same namespace.
See the :ref:
feed-tags
user guide section for details. (:issue:266
) - The :mod:
~reader.plugins.mark_as_read
plugin now uses the.reader.mark-as-read
metadata for configuration. Feeds using the old metadata,.reader.mark_as_read
, will be migrated automatically on update untilreader
3.0. - ๐ Allow running arbitrary actions before updating feeds
via :attr:
~Reader.before_feed_update_hooks
. - ๐ฆ Expose :data:
reader.plugins.DEFAULT_PLUGINS
. - โ Add the
global_metadata
experimental plugin.
- ๐ท Tags and metadata now share the same namespace.
See the :ref:
-
v2.6 Changes
๐ Released 2021-11-15
๐ Retrieve feeds in parallel, but parse them serially; previously, feeds would be parsed in parallel. Decreases Linux memory usage by ~20% when using
workers
; the macOS decrease is less notable. (:issue:261
)โก๏ธ Allow :meth:
~Reader.update_feeds()
and :meth:~Reader.update_feeds_iter()
to filter feeds byfeed
,tags
,broken
, andupdates_enabled
. (:issue:193
, :issue:219
, :issue:220
)Allow :meth:
~Reader.get_feeds()
and :meth:~Reader.get_feed_counts()
to filter feeds bynew
. (:issue:217
)Reuse the
requests
_ session when retrieving feeds; previously, each feed would get its own session.โ Add support for CLI plugins.
๐ Add the :mod:
~reader._plugins.cli_status
experimental plugin.๐ In the web application, show entry read time.
-
v2.5 Changes
๐ Released 2021-10-28
- In :meth:
~Reader.add_feed
and :meth:~Reader.change_feed_url
, validate if the current Reader configuration can handle the new feed URL; if not, raise :exc:InvalidFeedURLError
(a :exc:ValueError
subclass). (:issue:155
)
.. warning::
**This is a minor compatibility break**; previously, :exc:`ValueError` would never be raised for :class:`str` arguments. To get the previous behavior (no validation), use ``allow_invalid_url=True``.
- ๐ Allow users to add entries to an existing feed
through the new :meth:
~Reader.add_entry
method. Allow deleting user-added entries through :meth:~Reader.delete_entry
. (:issue:239
) โ Add the :attr:
~Entry.added
and :attr:~Entry.added_by
Entry attributes. (:issue:239
)โก๏ธ :attr:
Entry.updated
is now :const:None
if missing in the feed (:attr:~Entry.updated
became optional inversion 2.0
_). Use :attr:~Entry.updated_not_none
for the pre-2.5 behavior. Do not swap :attr:Entry.published
with :attr:Entry.updated
for RSS feeds where :attr:~Entry.updated
is missing. (:issue:183
)๐ Support PyPy 3.8.
๐ Fix bug causing :attr:
~Entry.read_modified
and :attr:~Entry.important_modified
to be reset to :const:None
when an entry is updated.๐ Fix bug where deleting an entry and then adding it again (with the same id) would fail if search was enabled and :meth:
~Reader.update_search
was not run before adding the new entry.
- In :meth:
-
v2.4 Changes
๐ Released 2021-10-19
0๏ธโฃ Enable search by default. (:issue:
252
)- Add the
search_enabled
:func:make_reader
argument. By default, search is enabled on the first :meth:~Reader.update_search
call; the previous behavior was to do nothing. - Always install the full-text search dependencies (previously optional).
The
search
extra remains available to avoid breaking dependent packages.
- Add the
โ Add the :attr:
~Feed.subtitle
and :attr:~Feed.version
Feed attributes. (:issue:223
)Change the :mod:
~reader.plugins.mark_as_read
plugin to also explicitly mark matching entries as unimportant, similar to how the don't care web application button works. (:issue:260
)๐ In the web application, show the feed subtitle. (:issue:
223
)
-
v2.3 Changes
๐ Released 2021-10-11
๐ Support Python 3.10. (:issue:
248
)๐ :mod:
~reader.plugins.entry_dedupe
now deletes old duplicates instead of marking them as read/unimportant. (:issue:140
)
.. note::
Please comment in :issue:`140` / open an issue if you were relying on the old behavior.
- .. _yanked 2.2:
Fix :mod:
~reader.plugins.entry_dedupe
bug introduced in 2.2, causing the newest read entry to be marked as unread if none of its duplicates are read (idem for important). This was an issue only when re-running the plugin for existing entries, not for new entries (since new entries are unread/unimportant). -
v2.2 Changes
๐ Released 2021-10-08
- ๐ :mod:
~reader.plugins.entry_dedupe
plugin improvements: reduce false negatives by using approximate content matching, and make it possible to re-run the plugin for existing entries. (:issue:202
) ๐ Allow running arbitrary actions for updated feeds via :attr:
~Reader.after_feed_update_hooks
. (:issue:202
)Add :meth:
~Reader.set_entry_read
and :meth:~Reader.set_entry_important
to allow marking an entry as (un)read/(un)important through a boolean flag. (:issue:256
)Record when an entry is marked as read/important, and make it available through :attr:
~Entry.read_modified
and :attr:~Entry.important_modified
. Allow providing a custom value using themodified
argument of :meth:~Reader.set_entry_read
and :meth:~Reader.set_entry_important
. (:issue:254
)๐ Make :mod:
~reader.plugins.entry_dedupe
copy :attr:~Entry.read_modified
and :attr:~Entry.important_modified
from the duplicates to the new entry. (:issue:254
)In the web application, allow marking an entry as don't care (read + unimportant explicitly set by the user) with a single button. (:issue:
254
)๐ In the web application, show the entry read modified / important modified timestamps as button tooltips. (:issue:
254
)
- ๐ :mod: