Add /add page and cli.py for updating feeds
This commit is contained in:
parent
3f3ad42acd
commit
8cea0bd347
8 changed files with 130 additions and 57 deletions
41
app/cli.py
41
app/cli.py
|
|
@ -1,9 +1,11 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import click
|
||||
from reader import Reader, UpdateError
|
||||
from reader import Feed, Reader, UpdateError, UpdateResult
|
||||
from reader.types import UpdatedFeed
|
||||
|
||||
from app.dependencies import get_reader
|
||||
|
||||
|
|
@ -11,19 +13,44 @@ if TYPE_CHECKING:
|
|||
from reader import UpdatedFeed
|
||||
|
||||
|
||||
def add_broken_feed_to_csv(feed: Feed | UpdateResult | None) -> None:
|
||||
"""Add a broken feed to a CSV file."""
|
||||
if feed is None:
|
||||
click.echo("Feed is None.", err=True)
|
||||
return
|
||||
|
||||
with Path("broken_feeds.csv").open("a", encoding="utf-8") as f:
|
||||
f.write(f"{feed.url}\n")
|
||||
|
||||
|
||||
@click.command()
|
||||
def update_feeds() -> None:
|
||||
"""Update all the feeds."""
|
||||
click.echo("Updating feeds...")
|
||||
reader: Reader = get_reader()
|
||||
for feed in reader.update_feeds_iter():
|
||||
click.echo("Updating feeds...")
|
||||
|
||||
for feed in reader.update_feeds_iter(updates_enabled=True, workers=100):
|
||||
url: str = feed.url
|
||||
value: UpdatedFeed | None | UpdateError = feed.value
|
||||
if value is not None and isinstance(value, UpdateError):
|
||||
click.echo(f"Error updating {feed.url}: {value}")
|
||||
else:
|
||||
click.echo(f"Updated {feed.url}.")
|
||||
|
||||
if isinstance(value, UpdateError):
|
||||
add_broken_feed_to_csv(feed)
|
||||
reader.disable_feed_updates(url)
|
||||
continue
|
||||
|
||||
if value is None:
|
||||
click.echo(f"Feed not updated: {url}")
|
||||
continue
|
||||
|
||||
click.echo(f"Updated feed: {url}")
|
||||
|
||||
click.echo("Feeds updated.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
reader: Reader = get_reader()
|
||||
|
||||
for feed in reader.get_feeds(updates_enabled=False):
|
||||
reader.enable_feed_updates(feed)
|
||||
|
||||
update_feeds()
|
||||
|
|
|
|||
|
|
@ -6,9 +6,10 @@ import time
|
|||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from fastapi import APIRouter, File, Request, UploadFile
|
||||
from fastapi import APIRouter, File, Form, Request, UploadFile
|
||||
from fastapi.responses import FileResponse
|
||||
from fastapi.templating import Jinja2Templates
|
||||
from reader import FeedExistsError, InvalidFeedURLError
|
||||
|
||||
from app.dependencies import CommonReader, CommonStats # noqa: TCH001
|
||||
from app.settings import MEDIA_ROOT
|
||||
|
|
@ -131,3 +132,40 @@ async def upload_page(request: Request, stats: CommonStats):
|
|||
async def contact(request: Request, stats: CommonStats):
|
||||
"""Contact page."""
|
||||
return templates.TemplateResponse(request=request, name="contact.html", context={"stats": stats})
|
||||
|
||||
|
||||
@static_router.post(path="/contact", summary="Contact page.", tags=["HTML"])
|
||||
async def contact_form(request: Request, stats: CommonStats, message: str = Form(...)):
|
||||
"""Contact page."""
|
||||
# TODO(TheLovinator): Send the message to the admin. # noqa: TD003
|
||||
return {
|
||||
"message": message,
|
||||
"stats": stats,
|
||||
}
|
||||
|
||||
|
||||
@static_router.get(path="/add", summary="Add feeds page.", tags=["HTML"])
|
||||
async def add_page(request: Request, stats: CommonStats):
|
||||
"""Add feeds page."""
|
||||
return templates.TemplateResponse(request=request, name="add.html", context={"stats": stats})
|
||||
|
||||
|
||||
@static_router.post(path="/add", summary="Add feeds page.", tags=["HTML"])
|
||||
async def add_feed(reader: CommonReader, stats: CommonStats, feed_urls: str = Form(...)):
|
||||
"""Add feeds page."""
|
||||
feed_info = []
|
||||
# Each line is a feed URL.
|
||||
for feed_url in feed_urls.split("\n"):
|
||||
try:
|
||||
reader.add_feed(feed_url.strip())
|
||||
feed_info.append({"url": feed_url.strip(), "status": "Added"})
|
||||
except FeedExistsError as e:
|
||||
feed_info.append({"url": feed_url.strip(), "status": str(e)})
|
||||
except InvalidFeedURLError as e:
|
||||
feed_info.append({"url": feed_url.strip(), "status": str(e)})
|
||||
|
||||
return {
|
||||
"feed_urls": feed_urls,
|
||||
"stats": stats,
|
||||
"feed_info": feed_info,
|
||||
}
|
||||
|
|
|
|||
5
app/testboi.py
Normal file
5
app/testboi.py
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
from reader import Reader, make_reader
|
||||
|
||||
reader: Reader = make_reader(url="testboi.sqlite")
|
||||
reader.add_feed("http://485i.com/feed/")
|
||||
reader.update_feeds()
|
||||
Loading…
Add table
Add a link
Reference in a new issue