From 31524f5e001ecda6395ca9e02d5138707ceb7e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Hells=C3=A9n?= Date: Mon, 5 Dec 2022 13:13:47 +0100 Subject: [PATCH] Run Black and use exc_info in logger.error --- discord_rss_bot/feeds.py | 59 ++++++++++++++++++++++++++++++------- discord_rss_bot/main.py | 29 +++++++++++------- discord_rss_bot/settings.py | 4 ++- discord_rss_bot/webhooks.py | 6 ++-- 4 files changed, 74 insertions(+), 24 deletions(-) diff --git a/discord_rss_bot/feeds.py b/discord_rss_bot/feeds.py index e89e9e5..1472f2d 100644 --- a/discord_rss_bot/feeds.py +++ b/discord_rss_bot/feeds.py @@ -23,7 +23,13 @@ Exceptions: from discord_webhook import DiscordWebhook from pydantic import BaseModel -from reader import FeedExistsError, FeedNotFoundError, InvalidFeedURLError, ParseError, StorageError +from reader import ( + FeedExistsError, + FeedNotFoundError, + InvalidFeedURLError, + ParseError, + StorageError, +) from requests import Response from discord_rss_bot.settings import logger, reader @@ -39,6 +45,7 @@ class IfFeedError(BaseModel): err_msg: The error message, if any. exception: The exception, if any. """ + feed_url: str webhook: str error: bool @@ -75,13 +82,25 @@ def add_feed(feed_url: str, webhook: str, exist_ok=False, allow_invalid_url=Fals reader.add_feed(feed=feed_url, exist_ok=exist_ok, allow_invalid_url=allow_invalid_url) except FeedExistsError as error: error_msg = "Feed already exists" - logger.error(f"{error_msg}: {error}") - return IfFeedError(error=True, err_msg=error_msg, feed_url=feed_url, webhook=webhook, exception=error.message) + logger.error(error_msg, exc_info=True) + return IfFeedError( + error=True, + err_msg=error_msg, + feed_url=feed_url, + webhook=webhook, + exception=error.message, + ) except InvalidFeedURLError as error: error_msg = "Invalid feed URL" - logger.error(f"{error_msg}: {error}") - return IfFeedError(error=True, err_msg=error_msg, feed_url=feed_url, webhook=webhook, exception=error.message) + logger.error(error_msg, exc_info=True) + return IfFeedError( + error=True, + err_msg=error_msg, + feed_url=feed_url, + webhook=webhook, + exception=error.message, + ) return IfFeedError(error=False, feed_url=feed_url, webhook=webhook) @@ -132,14 +151,14 @@ def send_to_discord(entry) -> Response: reader.set_entry_read(entry) logger.debug(f"New entry: {entry.title}") - webhook_url = reader.get_tag(entry.feed.url, "webhook") + webhook_url = str(reader.get_tag(entry.feed.url, "webhook")) if not webhook_url: logger.error(f"No webhook found for feed: {entry.feed.url}") raise NoWebhookFoundError(f"No webhook found for feed: {entry.feed.url}") logger.debug(f"Sending to webhook: {webhook_url}") - webhook = DiscordWebhook(url=str(webhook_url), content=f":robot: :mega: New entry: {entry.title}\n" - f"{entry.link}", rate_limit_retry=True) + webhook_message = f":robot: :mega: {entry.title}\n{entry.link}" + webhook = DiscordWebhook(url=webhook_url, content=webhook_message, rate_limit_retry=True) response = webhook.execute() if not response.ok: logger.error(f"Error: {response.status_code} {response.reason}") @@ -164,16 +183,34 @@ def update_feed(feed_url: str, webhook: str) -> IfFeedError: except FeedNotFoundError as error: error_msg = "Feed not found" logger.error(error_msg, exc_info=True) - return IfFeedError(error=True, err_msg=error_msg, feed_url=feed_url, webhook=webhook, exception=error.message) + return IfFeedError( + error=True, + err_msg=error_msg, + feed_url=feed_url, + webhook=webhook, + exception=error.message, + ) except ParseError as error: error_msg = "An error occurred while getting/parsing feed" logger.error(error_msg, exc_info=True) - return IfFeedError(error=True, err_msg=error_msg, feed_url=feed_url, webhook=webhook, exception=error.message) + return IfFeedError( + error=True, + err_msg=error_msg, + feed_url=feed_url, + webhook=webhook, + exception=error.message, + ) except StorageError as error: error_msg = "An exception was raised by the underlying storage" logger.error(error_msg, exc_info=True) - return IfFeedError(error=True, err_msg=error_msg, feed_url=feed_url, webhook=webhook, exception=error.message) + return IfFeedError( + error=True, + err_msg=error_msg, + feed_url=feed_url, + webhook=webhook, + exception=error.message, + ) return IfFeedError(error=False, feed_url=feed_url, webhook=webhook) diff --git a/discord_rss_bot/main.py b/discord_rss_bot/main.py index 8519f03..66ab293 100644 --- a/discord_rss_bot/main.py +++ b/discord_rss_bot/main.py @@ -80,12 +80,19 @@ async def create_feed(feed_url: str = Form(), webhook_dropdown: str = Form()): added_feed = add_feed(feed_url, webhook_dropdown) if updated_feed.error or added_feed.error: - error_dict = {"error": updated_feed.error, "feed": updated_feed.feed_url, "webhook": updated_feed.webhook, - "exception": updated_feed.exception} + error_dict = { + "error": updated_feed.error, + "feed": updated_feed.feed_url, + "webhook": updated_feed.webhook, + "exception": updated_feed.exception, + } return HTTPException(status_code=500, detail=error_dict) # Check if set_hook_by_name() was successful. - if isinstance(set_hook_by_name(name=webhook_dropdown, feed_url=feed_url), ResourceNotFoundError): + if isinstance( + set_hook_by_name(name=webhook_dropdown, feed_url=feed_url), + ResourceNotFoundError, + ): return set_hook_by_name(name=webhook_dropdown, feed_url=feed_url) new_tag = reader.get_tag(feed_url, "webhook") @@ -110,7 +117,7 @@ def create_list_of_webhooks(): @app.get("/favicon.ico", include_in_schema=False) async def favicon(): """Return favicon.""" - return FileResponse('static/favicon.ico') + return FileResponse("static/favicon.ico") @app.get("/add", response_class=HTMLResponse) @@ -183,11 +190,13 @@ def make_context_index(request) -> dict: feed_count = reader.get_feed_counts() entry_count = reader.get_entry_counts() - context = {"request": request, - "feeds": feed_list, - "feed_count": feed_count, - "entry_count": entry_count, - "webhooks": hooks} + context = { + "request": request, + "feeds": feed_list, + "feed_count": feed_count, + "entry_count": entry_count, + "webhooks": hooks, + } return context @@ -211,7 +220,7 @@ async def remove_feed(request: Request, feed_url: str = Form()): return templates.TemplateResponse("index.html", {"request": request, "feed": feed}) -@app.on_event('startup') +@app.on_event("startup") def startup(): """This is called when the server starts. diff --git a/discord_rss_bot/settings.py b/discord_rss_bot/settings.py index 77bdb6f..1867e40 100644 --- a/discord_rss_bot/settings.py +++ b/discord_rss_bot/settings.py @@ -39,7 +39,9 @@ def create_settings_file(settings_file) -> None: # Both options are commented out by default. webhooks = table() webhooks.add(comment('"First webhook" = "https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz"')) - webhooks.add(comment('"Second webhook" = "https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz"')) + webhooks.add( + comment('"Second webhook" = "https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz"') + ) # [database] # Option is commented out by default. diff --git a/discord_rss_bot/webhooks.py b/discord_rss_bot/webhooks.py index 6ece80c..4697378 100644 --- a/discord_rss_bot/webhooks.py +++ b/discord_rss_bot/webhooks.py @@ -19,6 +19,8 @@ def set_hook_by_name(name: str, feed_url: str) -> None or HTTPException: webhook_url = settings["webhooks"][name] try: reader.set_tag(feed_url, "webhook", webhook_url) + except ResourceNotFoundError as e: - logger.error(f"ResourceNotFoundError: {e}") - return HTTPException(status_code=500, detail=f"ResourceNotFoundError: Could not set webhook: {e}") + error_msg = f"ResourceNotFoundError: Could not set webhook: {e}" + logger.error(error_msg, exc_info=True) + return HTTPException(status_code=500, detail=error_msg)