All Versions
68
Latest Version
3.3
Avg Release Cycle
19 days
Latest Release
-

Changelog History
Page 3

  • v2.1 Changes

    ๐Ÿš€ Released 2021-08-18

    • Return :ref:entry averages <entry averages> for the past 1, 3, 12 months from the entry count methods. (:issue:249)

    • Use an index for get_entry_counts(feed=...) calls. Makes the /feeds?counts=yes page load 2-4x faster. (:issue:251)

    • โž• Add :class:UpdateResult :attr:~UpdateResult.updated_feed, :attr:~UpdateResult.error, and :attr:~UpdateResult.not_modified convenience properties. (:issue:204)

    • ๐ŸŒ In the web application, show the feed entry count averages as a bar sparkline. (:issue:249)

    • ๐Ÿ‘‰ Make the minimum SQLite version and required SQLite compile options reader._storage module globals, for easier monkeypatching. (:issue:163)

    This is allows supplying a user-defined json_array_length function on platforms where SQLite doesn't come with the JSON1 extension (e.g. on Windows with stock Python earlier than 3.9; details <https://github.com/lemon24/reader/issues/163#issuecomment-895041943>_).

    Note these globals are private, and thus not covered by the :doc:backwards compatibility policy <compat>.

  • v2.0 Changes

    ๐Ÿš€ Released 2021-07-17

    .. attention::

    This release contains backwards incompatible changes.
    
    • โœ‚ Remove old database migrations.

    If you are upgrading from reader 1.15 or newer, no action is required.

    .. _removed migrations 2.0:

    .. attention::

    If you are upgrading to *reader* 2.0 from a version **older than 1.15**,
    you must open your database with *reader* 1.15 or newer once,
    to run the removed migrations:
    
    .. code-block:: sh
    
        pip install 'reader>=1.15,<2' && \
        cat << EOF | python - db.sqlite
        import sys
        from reader import make_reader
        make_reader(sys.argv[1])
        print("OK")
        EOF
    
    • โœ‚ Remove code that issued deprecation warnings in versions 1.* (:issue:183):

      • :meth:Reader.remove_feed
      • :meth:Reader.mark_as_read
      • :meth:Reader.mark_as_unread
      • :meth:Reader.mark_as_important
      • :meth:Reader.mark_as_unimportant
      • :meth:Reader.iter_feed_metadata
      • the get_feed_metadata(feed, key, default=no value, /) form of :meth:Reader.get_feed_metadata
      • :meth:Reader.set_feed_metadata
      • :meth:Reader.delete_feed_metadata
      • the new_only parameter of :meth:~Reader.update_feeds() and :meth:~Reader.update_feeds_iter()
      • :attr:EntryError.url
      • :attr:UpdatedFeed.updated
    • The :class:~datetime.datetime attributes of :class:Feed and :class:Entry objects are now timezone-aware, with the timezone set to :attr:~datetime.timezone.utc. Previously, they were naive datetimes representing UTC times. (:issue:233)

    • The parameters of :meth:~Reader.update_feeds() and :meth:~Reader.update_feeds_iter() are now keyword-only. (:issue:183)

    • The feed_root argument of :func:make_reader now defaults to None (don't open local feeds) instead of '' (full filesystem access).

    • :func:make_reader may now raise any :exc:ReaderError, not just :exc:StorageError.

    • โšก๏ธ :attr:Entry.updated may now be :const:None; use :attr:~Entry.updated_not_none for the pre-2.0 behavior.

  • v1.20 Changes

    ๐Ÿš€ Released 2021-07-12

    • Add :attr:Reader.after_entry_update_hooks, which allows running arbitrary actions for updated entries. Thanks to Mirek Dล‚ugosz_ for the issue and pull request. (:issue:241)
    • Raise :exc:StorageError when opening / operating on an invalid database, instead of a plain :exc:sqlite3.DatabaseError. (:issue:243)

    .. _Mirek Dล‚ugosz: https://github.com/mirekdlugosz

  • v1.19 Changes

    ๐Ÿš€ Released 2021-06-16

    • โฌ‡๏ธ Drop Python 3.6 support. (:issue:237)
    • ๐Ÿ‘Œ Support PyPy 3.7. (:issue:234)
    • Skip enclosures with no href/url; previously, they would result in a parse error. (:issue:240)
    • ๐Ÿ‘ท Stop using Travis CI (only use GitHub Actions). (:issue:199)
    • โž• Add the new argument to :meth:~Reader.update_feeds() and :meth:~Reader.update_feeds_iter(); new_only is deprecated and will be removed in 2.0. (:issue:217)

    • โšก๏ธ Rename :attr:UpdatedFeed.updated to :attr:~UpdatedFeed.modified; for backwards compatibility, the old attribute will be available as a property until version 2.0, when it will be removed.. (:issue:241)

    .. warning::

    The signature of :class:`UpdatedFeed`
    changed from ``UpdatedFeed(url, new, updated)``
    to ``UpdatedFeed(url, new, modified)``.
    
    **This is a minor compatibility break**,
    but only affects third-party code that instantiates
    UpdatedFeed *directly* with ``updated`` as a *keyword argument*.
    
  • v1.18 Changes

    ๐Ÿš€ Released 2021-06-03

    • ๐Ÿ“‡ Rename :class:Reader feed metadata methods:

      • :meth:~Reader.iter_feed_metadata to :meth:~Reader.get_feed_metadata
      • :meth:~Reader.get_feed_metadata to :meth:~Reader.get_feed_metadata_item
      • :meth:~Reader.set_feed_metadata to :meth:~Reader.set_feed_metadata_item
      • :meth:~Reader.delete_feed_metadata to :meth:~Reader.delete_feed_metadata_item

    For backwards compatibility, the old method signatures will continue to work until version 2.0, when they will be removed. (:issue:183)

    .. warning::

    The ``get_feed_metadata(feed, key[, default]) -> value`` form
    is backwards-compatible *only when the arguments are positional*.
    
    **This is a minor compatibility break**;
    the following work in 1.17, but do not in 1.18::
    
        # raises TypeError
        reader.get_feed_metadata(feed, key, default=None)
    
        # returns `(key, value), ...` instead of `value`
        reader.get_feed_metadata(feed, key=key)
    
    The pre-1.18 :meth:`~Reader.get_feed_metadata`
    (1.18 :meth:`~Reader.get_feed_metadata_item`)
    is intended to have positional-only arguments,
    but this cannot be expressed easily until Python 3.8.
    
    • ๐Ÿ“‡ Rename :exc:MetadataNotFoundError to :exc:FeedMetadataNotFoundError. :exc:MetadataNotFoundError remains available, and is a superclass of :exc:FeedMetadataNotFoundError for backwards compatibility. (:issue:228)

    .. warning::

    The signatures of the following exceptions changed:
    
    :exc:`MetadataError`
        Takes a new required ``key`` argument, instead of no required arguments.
    
    :exc:`MetadataNotFoundError`
        Takes only one required argument, ``key``;
        the ``url`` argument has been removed.
    
        Use :exc:`FeedMetadataNotFoundError` instead.
    
    **This is a minor compatibility break**,
    but only affects third-party code that instantiates
    these exceptions *directly*.
    
    • ๐Ÿ“‡ Rename :attr:EntryError.url to :attr:~EntryError.feed_url; for backwards compatibility, the old attribute will be available as a property until version 2.0, when it will be removed. (:issue:183).

    .. warning::

    The signature of :exc:`EntryError` (and its subclasses)
    changed from ``EntryError(url, id)`` to ``EntryError(feed_url, id)``.
    
    **This is a minor compatibility break**,
    but only affects third-party code that instantiates
    these exceptions *directly* with ``url`` as a *keyword argument*.
    
    • Rename :meth:~Reader.remove_feed to :meth:~Reader.delete_feed. For backwards compatibility, the old method will continue to work until version 2.0, when it will be removed. (:issue:183)

    • Rename :class:Reader mark_as_... methods:

      • :meth:~Reader.mark_as_read to :meth:~Reader.mark_entry_as_read
      • :meth:~Reader.mark_as_unread to :meth:~Reader.mark_entry_as_unread
      • :meth:~Reader.mark_as_important to :meth:~Reader.mark_entry_as_important
      • :meth:~Reader.mark_as_unimportant to :meth:~Reader.mark_entry_as_unimportant

    For backwards compatibility, the old methods will continue to work until version 2.0, when they will be removed. (:issue:183)

    • ๐Ÿ›  Fix feeds with no title sometimes missing from the :meth:~Reader.get_feeds() results when there are more than 256 feeds (Storage.chunk_size). (:issue:203)

    • ๐ŸŒ When serving the web application with python -m reader serve, don't set the Referer header for cross-origin requests. (:issue:209)

  • v1.17 Changes

    ๐Ÿš€ Released 2021-05-06

    • ๐Ÿ“‡ Reserve tags and metadata keys starting with .reader. and .plugin. for reader- and plugin-specific uses. See the :ref:reserved names user guide section for details. (:issue:186)

    • โšก๏ธ Ignore :attr:~Feed.updated when updating feeds; only update the feed if other feed data changed or if any entries were added/updated. (:issue:231)

    Prevents spurious updates for feeds whose :attr:~Feed.updated changes excessively (either because the entries' content changes excessively, or because an RSS feed does not have a dc:date element, and feedparser falls back to lastBuildDate for :attr:~Feed.updated).

    • The regex_mark_as_read experimental plugin is now :ref:built-in <built-in plugins>. To use it with the CLI / web application, use the plugin name instead of the entry point (reader.mark_as_read).

    The config metadata key and format changed; the config will be migrated automatically on the next feed update, during reader version 1.17 only. If you used regex_mark_as_read and are upgrading to a version >1.17, install 1.17 (pip install reader==1.17) and run a full feed update (python -m reader update) before installing the newer version.

    • ๐Ÿš€ The enclosure-tags, preview-feed-list, and sqlite-releases unstable extras are not available anymore. Use the unstable-plugins extra to install dependencies of the unstable plugins instead.

    • โšก๏ธ In the web application, allow updating a feed manually. (:issue:195)

  • v1.16 Changes

    ๐Ÿš€ Released 2021-03-29

    • ๐Ÿ‘ Allow :func:make_reader to load plugins through the plugins argument. (:issue:229)

    Enable the :mod:~reader.plugins.ua_fallback plugin by default.

    :func:make_reader may now raise :exc:InvalidPluginError (a :exc:ValueError subclass, which it already raises implicitly) for invalid plugin names.

    • The enclosure_dedupe, feed_entry_dedupe, and ua_fallback plugins are now :ref:built-in <built-in plugins>. (:issue:229)

    To use them with the CLI / web application, use the plugin name instead of the entry point::

    reader._plugins.enclosure_dedupe:enclosure_dedupe   -> reader.enclosure_dedupe
    reader._plugins.feed_entry_dedupe:feed_entry_dedupe -> reader.entry_dedupe
    reader._plugins.ua_fallback:init                    -> reader.ua_fallback
    
    • โœ‚ Remove the plugins extra; plugin loading machinery does not have additional dependencies anymore.

    • Mention in the :doc:guide that all reader functions/methods can raise :exc:ValueError or :exc:TypeError if passed invalid arguments. There is no behavior change, this is just documenting existing, previously undocumented behavior.

  • v1.15 Changes

    ๐Ÿš€ Released 2021-03-21

    • โšก๏ธ Update entries whenever their content changes, regardless of their :attr:~Entry.updated date. (:issue:179)

    Limit content-only updates (not due to an :attr:~Entry.updated change) to 24 consecutive updates, to prevent spurious updates for entries whose content changes excessively (for example, because it includes the current time). (:issue:225)

    Previously, entries would be updated only if the entry :attr:~Entry.updated was newer than the stored one.

    • ๐Ÿ›  Fix bug causing entries that don't have :attr:~Entry.updated set in the feed to not be updated if the feed is marked as stale. Feed staleness is an internal feature used during storage migrations; this bug could only manifest when migrating from 0.22 to 1.x. (found during :issue:179)
    • ๐ŸŒ Minor web application improvements.
    • Minor CLI improvements.
  • v1.14 Changes

    ๐Ÿš€ Released 2021-02-22

    • Add the :meth:~Reader.update_feeds_iter method, which yields the update status of each feed as it gets updated. (:issue:204)
    • โšก๏ธ Change the return type of :meth:~Reader.update_feed from None to Optional[UpdatedFeed]. (:issue:204)
    • โฑ Add the session_timeout argument to :func:make_reader to set a timeout for retrieving HTTP(S) feeds. The default (connect timeout, read timeout) is (3.05, 60) seconds; the previous behavior was to never time out.
    • ๐Ÿ‘‰ Use PRAGMA user_version instead of a version table. (:issue:210)
    • ๐Ÿ‘‰ Use PRAGMA application_id to identify reader databases; the id is 0x66656564 โ€“ read in ASCII / UTF-8. (:issue:211)
    • โšก๏ธ Change the reader update command to show a progress bar and update summary (with colors), instead of plain log output. (:issue:204)
    • ๐Ÿ›  Fix broken Mypy config following 0.800 release. (:issue:213)
  • v1.13 Changes

    ๐Ÿš€ Released 2021-01-29

    • ๐Ÿ‘ JSON Feed support. (:issue:206)
    • ๐Ÿ“œ Split feed retrieval from parsing; should make it easier to add new/custom parsers. (:issue:206)
    • 0๏ธโƒฃ Prevent any logging output from the reader logger by default. (:issue:207)
    • In the preview_feed_list plugin, add <link rel=alternative ...> tags as a feed detection heuristic.
    • In the preview_feed_list plugin, add <a> tags as a fallback feed detection heuristic.
    • ๐ŸŒ In the web application, fix bug causing the entries page to crash when counts are enabled.