Changelog History
Page 1
-
v3.3 Changes
๐ Unreleased
๐ Support Python 3.11. (:issue:
289
)๐จ 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(...)
- ๐ :mod:
~reader._plugins.twitter
plugin: don't fail when deserializing tweets with missingedit_history_tweet_ids
(fails in tweepy 4.11, warns in tweepy >4.12).
-
v3.2 Changes
๐ 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 issue. (: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
.
- โก๏ธ :class:
-
v3.1 Changes
๐ Released 2022-08-29
- โฌ๏ธ Drop :mod:
~reader.plugins.readtime
plugin dependency onreadtime <https://github.com/alanhamlett/readtime_>
_ (which has a transitive dependency on lxml, which does not always have PyPy Windows wheels on PyPI). Thereadtime
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
)
- โฌ๏ธ Drop :mod:
-
v3.0 Changes
๐ Released 2022-07-30
.. attention::
This release contains backwards incompatible changes.
- โ Remove old database migrations.
Remove :mod:
~reader.plugins.mark_as_read
config tag name migration.If you are upgrading from reader 2.10 or newer, no action is required.
.. _removed migrations 3.0:
.. attention::
If you are upgrading to *reader* 3.0 from a version **older than 2.10**, you must open your database with *reader* 2.10 or newer once, to run the removed migrations: .. code-block:: sh pip install 'reader>=2.10,<3' && \ python - db.sqlite << EOF import sys from reader import make_reader from reader.plugins.mark_as_read import _migrate_pre_2_7_metadata as migrate_mark_as_read reader = make_reader(sys.argv[1]) for feed in reader.get_feeds(): migrate_mark_as_read(reader, feed) print("OK") EOF
โ Remove code that issued deprecation warnings in versions 2.* (:issue:
268
):- :meth:
Reader.get_feed_metadata
- :meth:
Reader.get_feed_metadata_item
- :meth:
Reader.set_feed_metadata_item
- :meth:
Reader.delete_feed_metadata_item
- :meth:
Reader.get_feed_tags
- :meth:
Reader.add_feed_tag
- :meth:
Reader.remove_feed_tag
- :exc:
MetadataError
- :exc:
MetadataNotFoundError
- :exc:
FeedMetadataNotFoundError
- :exc:
EntryMetadataNotFoundError
- the :attr:
~Entry.object_id
property of data objects and related exceptions
- :meth:
๐ Make some of the parameters of the following positional-only (:issue:
268
):- :meth:
Reader.add_feed
:feed
- :meth:
Reader.delete_feed
:feed
- :meth:
Reader.change_feed_url
:old
,new
- :meth:
Reader.get_feed
:feed
,default
- :meth:
Reader.set_feed_user_title
:feed
,title
- :meth:
Reader.enable_feed_updates
:feed
- :meth:
Reader.disable_feed_updates
:feed
- :meth:
Reader.update_feed
:feed
- :meth:
Reader.get_entry
:entry
,default
- :meth:
Reader.set_entry_read
:entry
,read
- :meth:
Reader.mark_entry_as_read
:entry
- :meth:
Reader.mark_entry_as_unread
:entry
- :meth:
Reader.set_entry_important
:entry
,important
- :meth:
Reader.mark_entry_as_important
:entry
- :meth:
Reader.mark_entry_as_unimportant
:entry
- :meth:
Reader.add_entry
:entry
- :meth:
Reader.delete_entry
:entry
- :meth:
Reader.search_entries
:query
- :meth:
Reader.search_entry_counts
:query
- :meth:
Reader.get_tags
:resource
- :meth:
Reader.get_tag_keys
:resource
- :meth:
Reader.get_tag
:resource
,key
,default
- :meth:
Reader.set_tag
:resource
,key
,value
- :meth:
Reader.delete_tag
:resource
,key
- :meth:
Reader.make_reader_reserved_name
:key
- :meth:
Reader.make_plugin_reserved_name
:plugin_name
,key
- :exc:
FeedError
(and subclasses):url
- :exc:
EntryError
(and subclasses):feed_url
,entry_id
- :exc:
TagError
(and subclasses):resource_id
,key
- :meth:
In :func:
make_reader
, wrap exceptions raised during plugin initialization in new exception :exc:PluginInitError
instead of letting them bubble up. (:issue:268
)Swap the order of the first two arguments of :exc:
TagError
(and subclasses);TagError(key, resource_id, ...)
becomesTagError(resource_id, key, ...)
. (:issue:268
)
-
v2.17 Changes
๐ Released 2022-07-23
- ๐ Deprecate the :attr:
~Entry.object_id
property of data objects in favor of new property :attr:~Entry.resource_id
. :attr:~Entry.resource_id
is the same as :attr:~Entry.object_id
, except for feeds and feed-related exceptions it is of typetuple[str]
instead ofstr
. :attr:~Entry.object_id
will be removed in version 3.0. (:issue:266
, :issue:268
) - โก๏ธ Do not attempt too hard to run
PRAGMA optimize
if the database is busy. Prevents rare "database is locked" errors when multiple threads using the same reader terminate at the same time. (:issue:206
)
- ๐ Deprecate the :attr:
-
v2.16 Changes
๐ Released 2022-07-17
- ๐ Allow using a :class:
Reader
object from multiple threads directly (do not require it to be used as a context manager anymore). (:issue:206
) - ๐ Allow :class:
Reader
objects to be reused after closing. (:issue:206
, :issue:284
) - ๐ Allow calling :meth:
~Reader.close
from any thread. (:issue:206
) - ๐ Allow using a :class:
Reader
object from multiple asyncio tasks. (:issue:206
)
- ๐ Allow using a :class:
-
v2.15 Changes
๐ Released 2022-07-08
- ๐ Allow using :class:
Reader
objects from threads other than the creating thread. (:issue:206
) - ๐ Allow using :class:
Reader
objects as context managers. (:issue:206
)
- ๐ Allow using :class:
-
v2.14 Changes
๐ Released 2022-06-30
- Mark reader as providing type information.
Previously, code importing from :mod:
reader
would fail type checking witherror: Skipping analyzing "reader": module is installed, but missing library stubs or py.typed marker
. (:issue:280
) - โฌ๏ธ Drop Python 3.7 support. (:issue:
278
) - ๐ Support PyPy 3.9.
- Mark reader as providing type information.
Previously, code importing from :mod:
-
v2.13 Changes
๐ Released 2022-06-28
- โ Add the :mod:
~reader._plugins.twitter
experimental plugin, which allows using a Twitter account as a feed. (:issue:271
) - โ Skip with a warning entries that have no or in an RSS feed;
only raise :exc:
ParseError
if all entries have a missing id. (Note that both Atom and JSON Feed entries are required to have an id by their respective specifications.) Thanks toMirek Dลugosz
_ for the issue and pull request. (:issue:281
) - โ Add :exc:
ReaderWarning
.
- โ Add the :mod:
-
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 in2.6 <Version 2.6_>
_. (:issue:275
)๐ In the web app, also show the read time for search results.