Skip to content

Commit

Permalink
Expose Feed.update_after and Feed.last_retrieved. #332
Browse files Browse the repository at this point in the history
  • Loading branch information
lemon24 committed Jun 12, 2024
1 parent 740b7c7 commit 97d50db
Show file tree
Hide file tree
Showing 6 changed files with 157 additions and 23 deletions.
7 changes: 7 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ Unreleased

* Update entries whenever their :attr:`~Entry.updated` changes,
don't compare the values. (:issue:`332`)
* Add :attr:`Feed.update_after` and :attr:`Feed.last_retrieved`. (:issue:`332`)
* The ``new`` filter of :meth:`~Reader.update_feeds()` etc. considers
a feed as new if it was never retrieved (:attr:`~Feed.last_retrieved`),
not if it was never updated successfully (:attr:`~Feed.last_updated`). (:issue:`332`)

.. FIXME: versionchanged on update_feeds() etc.
* Group mutually-exclusive attributes of :class:`~.FeedUpdateIntent`
into its :attr:`~.FeedUpdateIntent.value` union attribute. (:issue:`332`)

Expand Down
6 changes: 4 additions & 2 deletions src/reader/_storage/_entries.py
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,8 @@ def get_entries_query(
feeds.last_updated
feeds.last_exception
feeds.updates_enabled
feeds.update_after
feeds.last_retrieved
entries.id
entries.updated
entries.title
Expand Down Expand Up @@ -444,7 +446,7 @@ def get_entries_query(


def entry_factory(row: tuple[Any, ...]) -> Entry:
feed = feed_factory(row[0:12])
feed = feed_factory(row[0:14])
(
id,
updated,
Expand All @@ -464,7 +466,7 @@ def entry_factory(row: tuple[Any, ...]) -> Entry:
last_updated,
original_feed,
sequence,
) = row[12:30]
) = row[14:32]
return Entry(
id,
convert_timestamp(updated) if updated else None,
Expand Down
8 changes: 7 additions & 1 deletion src/reader/_storage/_feeds.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,8 @@ def get_feeds_query(filter: FeedFilter, sort: FeedSort) -> tuple[Query, dict[str
'last_updated',
'last_exception',
'updates_enabled',
'update_after',
'last_retrieved',
)
.FROM("feeds")
.scrolling_window_sort_key(FEED_SORT_KEYS[sort])
Expand All @@ -307,7 +309,9 @@ def feed_factory(row: tuple[Any, ...]) -> Feed:
last_updated,
last_exception,
updates_enabled,
) = row[:12]
update_after,
last_retrieved,
) = row[:14]
return Feed(
url,
convert_timestamp(updated) if updated else None,
Expand All @@ -321,6 +325,8 @@ def feed_factory(row: tuple[Any, ...]) -> Feed:
convert_timestamp(last_updated) if last_updated else None,
ExceptionInfo(**json.loads(last_exception)) if last_exception else None,
updates_enabled == 1,
convert_timestamp(update_after) if update_after else None,
convert_timestamp(last_retrieved) if last_retrieved else None,
)


Expand Down
14 changes: 13 additions & 1 deletion src/reader/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ class Feed(_namedtuple_compat):
#: .. versionadded:: 1.3
added: datetime = cast(datetime, None)

#: The date when the feed was last retrieved by reader.
#: The date when the feed was last (successfully) updated by reader.
#:
#: .. versionadded:: 1.3
last_updated: datetime | None = None
Expand All @@ -139,6 +139,18 @@ class Feed(_namedtuple_compat):
#: .. versionadded:: 1.11
updates_enabled: bool = True

#: The earliest time the feed will next be updated
#: (when using scheduled updates).
#:
#: .. versionadded:: 3.13
update_after: datetime | None = None

#: The date when the feed was last retrieved by reader,
#: regardless of the outcome.
#:
#: .. versionadded:: 3.13
last_retrieved: datetime | None = None

@property
def resource_id(self) -> tuple[str]:
"""Alias for (:attr:`~url`,).
Expand Down
Loading

0 comments on commit 97d50db

Please sign in to comment.