Honor 429 Too Many Requests and 503 Service Unavailable responses
All checks were successful
Test and build Docker image / docker (push) Successful in 1m33s

This commit is contained in:
2025-05-05 01:19:52 +02:00
parent 7f9c934d08
commit 901d6cb1a6
3 changed files with 14 additions and 5 deletions

View File

@ -2,6 +2,7 @@ from __future__ import annotations
import datetime import datetime
import logging import logging
import os
import pprint import pprint
import re import re
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any
@ -303,7 +304,10 @@ def send_to_discord(custom_reader: Reader | None = None, feed: Feed | None = Non
reader: Reader = get_reader() if custom_reader is None else custom_reader reader: Reader = get_reader() if custom_reader is None else custom_reader
# Check for new entries for every feed. # Check for new entries for every feed.
reader.update_feeds() reader.update_feeds(
scheduled=True,
workers=os.cpu_count() or 1,
)
# Loop through the unread entries. # Loop through the unread entries.
entries: Iterable[Entry] = reader.get_entries(feed=feed, read=False) entries: Iterable[Entry] = reader.get_entries(feed=feed, read=False)

View File

@ -100,9 +100,9 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None]:
add_missing_tags(reader) add_missing_tags(reader)
scheduler: AsyncIOScheduler = AsyncIOScheduler() scheduler: AsyncIOScheduler = AsyncIOScheduler()
# Update all feeds every 15 minutes. # Run job every minute to check for new entries. Feeds will be checked every 15 minutes.
# TODO(TheLovinator): Make this configurable. # TODO(TheLovinator): Make this configurable.
scheduler.add_job(send_to_discord, "interval", minutes=15, next_run_time=datetime.now(tz=UTC)) scheduler.add_job(send_to_discord, "interval", minutes=1, next_run_time=datetime.now(tz=UTC))
scheduler.start() scheduler.start()
logger.info("Scheduler started.") logger.info("Scheduler started.")
yield yield

View File

@ -24,7 +24,7 @@ default_custom_embed: dict[str, str] = {
} }
@lru_cache @lru_cache(maxsize=1)
def get_reader(custom_location: Path | None = None) -> Reader: def get_reader(custom_location: Path | None = None) -> Reader:
"""Get the reader. """Get the reader.
@ -35,5 +35,10 @@ def get_reader(custom_location: Path | None = None) -> Reader:
The reader. The reader.
""" """
db_location: Path = custom_location or Path(data_dir) / "db.sqlite" db_location: Path = custom_location or Path(data_dir) / "db.sqlite"
reader: Reader = make_reader(url=str(db_location))
return make_reader(url=str(db_location)) # https://reader.readthedocs.io/en/latest/api.html#reader.types.UpdateConfig
# Set the update interval to 15 minutes
reader.set_tag((), ".reader.update", {"interval": 15})
return reader