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
- :meth:
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 toNone
(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 toMirek 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
- Add :attr:
-
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*.
- โฌ๏ธ Drop Python 3.6 support. (:issue:
-
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
- :meth:
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
- :meth:
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 theReferer
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 adc:date
element, and feedparser falls back tolastBuildDate
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
, andsqlite-releases
unstable extras are not available anymore. Use theunstable-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 theplugins
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
, andua_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.
- ๐ Allow :func:
-
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.
- โก๏ธ Update entries whenever their content changes,
regardless of their :attr:
-
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
fromNone
toOptional[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 is0x66656564
โ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
)
- Add the :meth:
-
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.
- ๐ JSON Feed support. (:issue: