Fix all errors and warnings

This commit is contained in:
2023-01-10 23:07:15 +01:00
parent 204f64049b
commit 504f1c5fe6
7 changed files with 58 additions and 67 deletions

View File

@ -42,9 +42,7 @@ def has_black_tags(custom_reader: Reader, feed: Feed) -> bool:
blacklist_summary: str = get_blacklist_summary(custom_reader, feed) blacklist_summary: str = get_blacklist_summary(custom_reader, feed)
blacklist_content: str = get_blacklist_content(custom_reader, feed) blacklist_content: str = get_blacklist_content(custom_reader, feed)
if blacklist_title or blacklist_summary or blacklist_content: return bool(blacklist_title or blacklist_summary or blacklist_content)
return True
return False
def should_be_skipped(custom_reader: Reader, entry: Entry) -> bool: def should_be_skipped(custom_reader: Reader, entry: Entry) -> bool:
@ -61,22 +59,16 @@ def should_be_skipped(custom_reader: Reader, entry: Entry) -> bool:
feed: Feed = entry.feed feed: Feed = entry.feed
blacklist_title: str = get_blacklist_title(custom_reader, feed) blacklist_title: str = get_blacklist_title(custom_reader, feed)
blacklist_summary: str = get_blacklist_summary(custom_reader, feed) blacklist_summary: str = get_blacklist_summary(custom_reader, feed)
blacklist_content: str = get_blacklist_content(custom_reader, feed) # blacklist_content: str = get_blacklist_content(custom_reader, feed)
# TODO: Fix content # TODO: Fix content
# TODO: Check author # TODO: Check author
if blacklist_title: if entry.title and blacklist_title and is_word_in_text(blacklist_title, entry.title):
if is_word_in_text(blacklist_title, entry.title):
return True return True
elif entry.summary and blacklist_summary and is_word_in_text(blacklist_summary, entry.summary):
if blacklist_summary:
if is_word_in_text(blacklist_summary, entry.summary):
return True return True
return False return False
# if blacklist_content.lower() in entry.content.lower():
def get_blacklist_content(custom_reader: Reader, feed: Feed) -> str: def get_blacklist_content(custom_reader: Reader, feed: Feed) -> str:
""" """

View File

@ -1,7 +1,7 @@
from typing import Iterable from typing import Iterable
from discord_webhook import DiscordWebhook from discord_webhook import DiscordWebhook
from reader import Entry, Reader from reader import Entry, Feed, Reader
from requests import Response from requests import Response
from discord_rss_bot import settings from discord_rss_bot import settings
@ -10,7 +10,7 @@ from discord_rss_bot.settings import get_reader
from discord_rss_bot.whitelist import has_white_tags, should_be_sent from discord_rss_bot.whitelist import has_white_tags, should_be_sent
def send_to_discord(custom_reader: Reader | None = None, feed=None, do_once=False) -> None: def send_to_discord(custom_reader: Reader | None = None, feed: Feed | None = None, do_once: bool = False) -> None:
""" """
Send entries to Discord. Send entries to Discord.
@ -38,37 +38,41 @@ def send_to_discord(custom_reader: Reader | None = None, feed=None, do_once=Fals
for entry in entries: for entry in entries:
# Set the webhook to read, so we don't send it again. # Set the webhook to read, so we don't send it again.
reader.set_entry_read(entry, True) # type: ignore reader.set_entry_read(entry, True)
webhook_url = settings.get_webhook_for_entry(reader, entry) webhook_url: str | None = settings.get_webhook_for_entry(reader, entry)
webhook_message: str = f":robot: :mega: {entry.title}\n{entry.link}" webhook_message: str = f":robot: :mega: {entry.title}\n{entry.link}"
if webhook_url is None:
print(f"Error: No webhook found for feed: {entry.feed.title}")
continue
webhook: DiscordWebhook = DiscordWebhook(url=webhook_url, content=webhook_message, rate_limit_retry=True) webhook: DiscordWebhook = DiscordWebhook(url=webhook_url, content=webhook_message, rate_limit_retry=True)
# Check if the entry has a whitelist if feed is not None and has_white_tags(reader, feed):
if has_white_tags(reader, feed):
# Only send the entry if it is whitelisted, otherwise, mark it as read and continue. # Only send the entry if it is whitelisted, otherwise, mark it as read and continue.
if should_be_sent(reader, entry): if should_be_sent(reader, entry):
response: Response = webhook.execute() response: Response = webhook.execute()
reader.set_entry_read(entry, True) # type: ignore reader.set_entry_read(entry, True)
if not response.ok: if not response.ok:
print(f"Error sending to Discord: {response.text}") print(f"Error sending to Discord: {response.text}")
reader.set_entry_read(entry, False) # type: ignore reader.set_entry_read(entry, False)
else: else:
reader.set_entry_read(entry, True) # type: ignore reader.set_entry_read(entry, True)
continue continue
# Check if the entry is blacklisted, if it is, mark it as read and continue. # Check if the entry is blacklisted, if it is, mark it as read and continue.
if should_be_skipped(reader, entry): if should_be_skipped(reader, entry):
print(f"Blacklisted entry: {entry.title}, not sending to Discord.") print(f"Blacklisted entry: {entry.title}, not sending to Discord.")
reader.set_entry_read(entry, True) # type: ignore reader.set_entry_read(entry, True)
continue continue
# It was not blacklisted, and not forced through whitelist, so we will send it to Discord. # It was not blacklisted, and not forced through whitelist, so we will send it to Discord.
response: Response = webhook.execute() response: Response = webhook.execute()
if not response.ok: if not response.ok:
print(f"Error sending to Discord: {response.text}") print(f"Error sending to Discord: {response.text}")
reader.set_entry_read(entry, False) # type: ignore reader.set_entry_read(entry, False)
# If we only want to send one entry, we will break the loop. This is used when testing this function. # If we only want to send one entry, we will break the loop. This is used when testing this function.
if do_once: if do_once:

View File

@ -69,9 +69,10 @@ def entry_is_blacklisted(entry_to_check: Entry) -> bool:
return bool(has_black_tags(reader, entry_to_check.feed) and should_be_skipped(reader, entry_to_check)) return bool(has_black_tags(reader, entry_to_check.feed) and should_be_skipped(reader, entry_to_check))
templates.env.filters["encode_url"] = encode_url # Add the filters to the Jinja2 environment so they can be used in html templates.
templates.env.filters["entry_is_whitelisted"] = entry_is_whitelisted templates.env.filters["encode_url"] = encode_url # type: ignore
templates.env.filters["entry_is_blacklisted"] = entry_is_blacklisted templates.env.filters["entry_is_whitelisted"] = entry_is_whitelisted # type: ignore
templates.env.filters["entry_is_blacklisted"] = entry_is_blacklisted # type: ignore
@app.post("/add_webhook") @app.post("/add_webhook")
@ -175,8 +176,8 @@ async def create_feed(feed_url: str = Form(), webhook_dropdown: str = Form()):
if hooks: if hooks:
# Get the webhook URL from the dropdown. # Get the webhook URL from the dropdown.
for hook in hooks: for hook in hooks:
if hook["name"] == webhook_dropdown: if hook["name"] == webhook_dropdown: # type: ignore
webhook_url: str = hook["url"] webhook_url: str = hook["url"] # type: ignore
break break
if not webhook_url: if not webhook_url:
@ -277,9 +278,9 @@ async def get_whitelist(feed_url: str, request: Request):
feed: Feed = reader.get_feed(url) feed: Feed = reader.get_feed(url)
# Get previous data, this is used when creating the form. # Get previous data, this is used when creating the form.
whitelist_title = whitelist.get_whitelist_title(reader, feed) whitelist_title: str = whitelist.get_whitelist_title(reader, feed)
whitelist_summary = whitelist.get_whitelist_summary(reader, feed) whitelist_summary: str = whitelist.get_whitelist_summary(reader, feed)
whitelist_content = whitelist.get_whitelist_content(reader, feed) whitelist_content: str = whitelist.get_whitelist_content(reader, feed)
context = { context = {
"request": request, "request": request,
@ -288,7 +289,7 @@ async def get_whitelist(feed_url: str, request: Request):
"whitelist_summary": whitelist_summary, "whitelist_summary": whitelist_summary,
"whitelist_content": whitelist_content, "whitelist_content": whitelist_content,
} }
return templates.TemplateResponse("whitelist.html", context) return templates.TemplateResponse("whitelist.html", context) # type: ignore
@app.post("/blacklist") @app.post("/blacklist")
@ -298,7 +299,8 @@ async def set_blacklist(
blacklist_content: str = Form(None), blacklist_content: str = Form(None),
feed_url: str = Form(), feed_url: str = Form(),
): ):
"""Set the blacklist, if this is set we will check if words are in the title, summary or content and then don't send that entry. """Set the blacklist, if this is set we will check if words are in the title, summary or content
and then don't send that entry.
Args: Args:
blacklist_title: Blacklisted words for when checking the title. blacklist_title: Blacklisted words for when checking the title.
@ -332,9 +334,9 @@ async def get_blacklist(feed_url: str, request: Request):
feed: Feed = reader.get_feed(url) feed: Feed = reader.get_feed(url)
# Get previous data, this is used when creating the form. # Get previous data, this is used when creating the form.
blacklist_title = blacklist.get_blacklist_title(reader, feed) blacklist_title: str = blacklist.get_blacklist_title(reader, feed)
blacklist_summary = blacklist.get_blacklist_summary(reader, feed) blacklist_summary: str = blacklist.get_blacklist_summary(reader, feed)
blacklist_content = blacklist.get_blacklist_content(reader, feed) blacklist_content: str = blacklist.get_blacklist_content(reader, feed)
context = { context = {
"request": request, "request": request,
@ -343,7 +345,7 @@ async def get_blacklist(feed_url: str, request: Request):
"blacklist_summary": blacklist_summary, "blacklist_summary": blacklist_summary,
"blacklist_content": blacklist_content, "blacklist_content": blacklist_content,
} }
return templates.TemplateResponse("blacklist.html", context) return templates.TemplateResponse("blacklist.html", context) # type: ignore
@app.get("/add", response_class=HTMLResponse) @app.get("/add", response_class=HTMLResponse)
@ -357,8 +359,8 @@ def get_add(request: Request):
Returns: Returns:
HTMLResponse: The HTML response. HTMLResponse: The HTML response.
""" """
context = make_context_index(request) context = make_context_index(request) # type: ignore
return templates.TemplateResponse("add.html", context) return templates.TemplateResponse("add.html", context) # type: ignore
@app.get("/feed", response_class=HTMLResponse) @app.get("/feed", response_class=HTMLResponse)
@ -385,7 +387,7 @@ async def get_feed(feed_url: str, request: Request):
feed_counts: FeedCounts = reader.get_feed_counts(feed=url) feed_counts: FeedCounts = reader.get_feed_counts(feed=url)
context = {"request": request, "feed": feed, "entries": entries, "feed_counts": feed_counts} context = {"request": request, "feed": feed, "entries": entries, "feed_counts": feed_counts}
return templates.TemplateResponse("feed.html", context) return templates.TemplateResponse("feed.html", context) # type: ignore
@app.get("/webhooks", response_class=HTMLResponse) @app.get("/webhooks", response_class=HTMLResponse)
@ -399,7 +401,7 @@ async def get_webhooks(request: Request):
Returns: Returns:
HTMLResponse: The HTML response. HTMLResponse: The HTML response.
""" """
return templates.TemplateResponse("webhooks.html", {"request": request}) return templates.TemplateResponse("webhooks.html", {"request": request}) # type: ignore
@app.get("/", response_class=HTMLResponse) @app.get("/", response_class=HTMLResponse)
@ -413,11 +415,11 @@ def index(request: Request):
Returns: Returns:
HTMLResponse: The HTML response. HTMLResponse: The HTML response.
""" """
context = make_context_index(request) context = make_context_index(request) # type: ignore
return templates.TemplateResponse("index.html", context) return templates.TemplateResponse("index.html", context) # type: ignore
def make_context_index(request) -> dict: def make_context_index(request: Request) -> dict[str, Any]:
""" """
Create the needed context for the index page. Create the needed context for the index page.
@ -503,10 +505,10 @@ async def search(request: Request, query: str):
"query": query, "query": query,
"search_amount": search_amount, "search_amount": search_amount,
} }
return templates.TemplateResponse("search.html", context) return templates.TemplateResponse("search.html", context) # type: ignore
@app.on_event("startup") @app.on_event("startup") # type: ignore
def startup() -> None: def startup() -> None:
"""This is called when the server starts. """This is called when the server starts.
@ -514,10 +516,10 @@ def startup() -> None:
scheduler: BackgroundScheduler = BackgroundScheduler() scheduler: BackgroundScheduler = BackgroundScheduler()
# Update all feeds every 15 minutes. # Update all feeds every 15 minutes.
scheduler.add_job(send_to_discord, "interval", minutes=15, next_run_time=datetime.now()) scheduler.add_job(send_to_discord, "interval", minutes=15, next_run_time=datetime.now()) # type: ignore
scheduler.start() scheduler.start() # type: ignore
if __name__ == "__main__": if __name__ == "__main__":
uvicorn.run("main:app", log_level="debug", reload=True) uvicorn.run("main:app", log_level="debug", reload=True) # type: ignore

View File

@ -2,7 +2,7 @@ import logging
import os import os
from platformdirs import user_data_dir from platformdirs import user_data_dir
from reader import Entry, Reader, TagNotFoundError, make_reader from reader import Entry, Reader, TagNotFoundError, make_reader # type: ignore
logging_format: str = "[%(asctime)s] [%(funcName)s:%(lineno)d] %(message)s" logging_format: str = "[%(asctime)s] [%(funcName)s:%(lineno)d] %(message)s"
logging.basicConfig(level=logging.DEBUG, format=logging_format) logging.basicConfig(level=logging.DEBUG, format=logging_format)

View File

@ -42,9 +42,7 @@ def has_white_tags(custom_reader: Reader, feed: Feed) -> bool:
whitelist_summary: str = get_whitelist_summary(custom_reader, feed) whitelist_summary: str = get_whitelist_summary(custom_reader, feed)
whitelist_content: str = get_whitelist_content(custom_reader, feed) whitelist_content: str = get_whitelist_content(custom_reader, feed)
if whitelist_title or whitelist_summary or whitelist_content: return bool(whitelist_title or whitelist_summary or whitelist_content)
return True
return False
def should_be_sent(custom_reader: Reader, entry: Entry) -> bool: def should_be_sent(custom_reader: Reader, entry: Entry) -> bool:
@ -61,20 +59,15 @@ def should_be_sent(custom_reader: Reader, entry: Entry) -> bool:
feed: Feed = entry.feed feed: Feed = entry.feed
whitelist_title: str = get_whitelist_title(custom_reader, feed) whitelist_title: str = get_whitelist_title(custom_reader, feed)
whitelist_summary: str = get_whitelist_summary(custom_reader, feed) whitelist_summary: str = get_whitelist_summary(custom_reader, feed)
whitelist_content: str = get_whitelist_content(custom_reader, feed) # whitelist_content: str = get_whitelist_content(custom_reader, feed)
# TODO: Fix content # TODO: Fix content
# TODO: Check author # TODO: Check author
if whitelist_title: if entry.title and whitelist_title and is_word_in_text(whitelist_title, entry.title):
if is_word_in_text(whitelist_title, entry.title):
return True return True
elif entry.summary and whitelist_summary and is_word_in_text(whitelist_summary, entry.summary):
if whitelist_summary:
if is_word_in_text(whitelist_summary, entry.summary):
return True return True
return False return False
# if whitelist_content.lower() in entry.content.lower():
def get_whitelist_content(custom_reader: Reader, feed: Feed) -> str: def get_whitelist_content(custom_reader: Reader, feed: Feed) -> str:

View File

@ -2,7 +2,7 @@ import os
import tempfile import tempfile
from pathlib import Path from pathlib import Path
from reader import Feed, Reader, make_reader from reader import Feed, Reader, make_reader # type: ignore
from discord_rss_bot.feeds import send_to_discord from discord_rss_bot.feeds import send_to_discord

View File

@ -3,7 +3,7 @@ import tempfile
from pathlib import Path from pathlib import Path
from typing import Iterable from typing import Iterable
from reader import EntrySearchResult, Feed, Reader, make_reader from reader import EntrySearchResult, Feed, Reader, make_reader # type: ignore
from discord_rss_bot.search import create_html_for_search_results from discord_rss_bot.search import create_html_for_search_results