All Versions
Latest Version
Avg Release Cycle
19 days
Latest Release

Changelog History
Page 1

  • v2.13 Changes

    🚀 Unreleased

  • v2.12 Changes

    🚀 Released 2022-03-31

    • ➕ Add the :mod:~reader.plugins.readtime :ref:built-in <built-in plugins> plugin, which stores the entry read time as a tag during feed update. (:issue:275)

    • Allow running arbitrary actions once before/after updating feeds via :attr:~Reader.before_feeds_update_hooks / :attr:~Reader.after_feeds_update_hooks.

    • Add :meth:Entry.get_content and :attr:Content.is_html.

    • 🌐 In the web app, use the read time provided by the :mod:~reader.plugins.readtime plugin, instead of calculating it on each page load. Speeds up the rendering of the entries page by 20-30%, hopefully winning back the time lost when the read time feature was first added in 2.6 <Version 2.6_>_. (:issue:275)

    • 🌐 In the web app, also show the read time for search results.

  • v2.11 Changes

    🚀 Released 2022-03-17

    • 🛠 Fix issue causing :func:make_reader to fail with message database requirement error: required SQLite compile options missing: ['ENABLE_JSON1'] when using SQLite 3.38 or newer. (:issue:273)
  • 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

    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)

  • 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 until reader 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.
  • 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 by feed, tags, broken, and updates_enabled. (:issue:193, :issue:219, :issue:220)

    • Allow :meth:~Reader.get_feeds() and :meth:~Reader.get_feed_counts() to filter feeds by new. (: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 in version 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.

  • 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 :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)