reader v3.0 Release Notes

  • ๐Ÿš€ 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
    • ๐Ÿ‘‰ 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
    • 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, ...) becomes TagError(resource_id, key, ...). (:issue:268)