Skip to content

Commit

Permalink
Merge pull request 'feat: add notifications' (#9) from notification i…
Browse files Browse the repository at this point in the history
  • Loading branch information
leozqin committed Mar 25, 2024
2 parents d1f5193 + 2aa29dc commit 9ed91d5
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 9 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -162,4 +162,6 @@ cython_debug/

# system stuff
*.yml
*.json
*.json
session.txt
.envrc
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ dependencies = [
"markdown2[all]",
"langchain",
"unstructured",
"markdown"
"markdown",
"simplematrixbotlib"
]

[project.urls]
Expand Down
25 changes: 25 additions & 0 deletions rssynthesis/notifications.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from simplematrixbotlib import Bot, Creds
from os import environ
from logging import getLogger
from rssynthesis.models import Feed, FeedEntry

creds = Creds(
homeserver=environ["MATRIX_HOMESERVER_URL"],
username=environ["MATRIX_BOT_USERNAME"],
password=environ["MATRIX_BOT_PASSWORD"],
)

bot = Bot(creds=creds)
room_id = environ["MATRIX_BOT_ROOM_ID"]

logger = getLogger("uvicorn.error")

def _make_read_link(entry: FeedEntry):
base_url = environ["RSS_BASE_URL"]
return f"{base_url}/read/{entry.id}"


async def send_notification(feed: Feed, entry: FeedEntry):
msg = f"{feed.name}: [{entry.title}]({_make_read_link(entry)})"
logger.info(f"Sending notification to {room_id}")
await bot.api.send_markdown_message(room_id=room_id, message=msg)
15 changes: 9 additions & 6 deletions rssynthesis/rss.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from rssynthesis.db import DB
from rssynthesis.models import Feed, FeedEntry
from rssynthesis.notifications import send_notification

logger = getLogger("uvicorn.error")

Expand All @@ -25,7 +26,7 @@ def load_feeds(config_path: str) -> None:
db.insert_feed(feed)


def check_feeds() -> List:
async def check_feeds() -> List:
now = int(datetime.now(tz=timezone.utc).timestamp())
logger.info(f"Checking feeds starting at time {now}")

Expand All @@ -44,12 +45,12 @@ def check_feeds() -> List:
# if we have no history, take the first 5
new_items.extend(feed.rss.entries[0:5])

db.update_poll_state(feed=feed, now=now)
add_feed_entries(feed=feed, entries=new_items)
await db.update_poll_state(feed=feed, now=now)
await add_feed_entries(feed=feed, entries=new_items)
logger.info(f"Found {len(new_items)} new item(s) for feed {feed.name}")


def add_feed_entries(feed: Feed, entries: List) -> None:
async def add_feed_entries(feed: Feed, entries: List) -> None:
for entry in entries:
feed_entry = FeedEntry(
**{
Expand All @@ -68,5 +69,7 @@ def add_feed_entries(feed: Feed, entries: List) -> None:
f"Upserting entry from {feed.name}: {feed_entry.title} - id {feed_entry.id}"
)

db.upsert_feed_entry(feed=feed, entry=feed_entry)
db.get_entry_content(entry=feed_entry)
await db.upsert_feed_entry(feed=feed, entry=feed_entry)
await db.get_entry_content(entry=feed_entry)

await send_notification(feed=feed, entry=feed_entry)
7 changes: 6 additions & 1 deletion rssynthesis/rssynthesis.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

from rssynthesis.rss import load_feeds, check_feeds
from rssynthesis.ui import list_feeds, list_entries, get_entry_content
from rssynthesis.notifications import bot

logger = getLogger("uvicorn.error")
base_path = Path(__file__).parent
Expand All @@ -26,16 +27,20 @@
@repeat_every(seconds=60*5, logger=logger)
async def poll_feeds():
logger.info("Checking feeds for updates")
check_feeds()
await check_feeds()


@asynccontextmanager
async def lifespan(app: FastAPI):
load_feeds(config_path=config_path)

await bot.api.login()
await poll_feeds()

yield

bot.api.async_client.logout()


app = FastAPI(lifespan=lifespan, title="RSSynthesis", openapi_url="/openapi.json")

Expand Down

0 comments on commit 9ed91d5

Please sign in to comment.