From 2f24de421f6293f122feec72acfe2234ff914654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Hells=C3=A9n?= Date: Sat, 10 Dec 2022 22:30:35 +0100 Subject: [PATCH] Move search stuff to own file --- discord_rss_bot/feeds.py | 4 +--- discord_rss_bot/main.py | 39 ++----------------------------- discord_rss_bot/search.py | 49 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 40 deletions(-) create mode 100644 discord_rss_bot/search.py diff --git a/discord_rss_bot/feeds.py b/discord_rss_bot/feeds.py index a25e84e..baf78cc 100644 --- a/discord_rss_bot/feeds.py +++ b/discord_rss_bot/feeds.py @@ -24,9 +24,7 @@ Exceptions: from typing import Iterable from discord_webhook import DiscordWebhook -from reader import ( - Entry, -) +from reader import Entry from requests import Response from discord_rss_bot.settings import reader diff --git a/discord_rss_bot/main.py b/discord_rss_bot/main.py index 357c3ce..a7bbf4b 100644 --- a/discord_rss_bot/main.py +++ b/discord_rss_bot/main.py @@ -37,11 +37,12 @@ from fastapi import FastAPI, Form, HTTPException, Request from fastapi.responses import FileResponse, HTMLResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates -from reader import Entry, EntryCounts, EntrySearchResult, Feed, FeedCounts, HighlightedString +from reader import Entry, EntryCounts, Feed, FeedCounts from starlette.templating import _TemplateResponse from tomlkit.toml_document import TOMLDocument from discord_rss_bot.feeds import send_to_discord +from discord_rss_bot.search import create_html_for_search_results from discord_rss_bot.settings import read_settings_file, reader app: FastAPI = FastAPI() @@ -251,42 +252,6 @@ async def search(request: Request, query: str) -> _TemplateResponse: search_results = reader.search_entries(query) search_amount = reader.search_entry_counts(query) - def add_span_with_slice(highlighted_string: HighlightedString): - """Add a span with the highlighted string.""" - - for txt_slice in highlighted_string.highlights: - first = f"{highlighted_string.value[: txt_slice.start]}" - second = f"{highlighted_string.value[txt_slice.start: txt_slice.stop]}" - third = f"{highlighted_string.value[txt_slice.stop:]}" - return f"{first}{second}{third}" - - def create_html_for_search_results(search_results: Iterable[EntrySearchResult]) -> str: - """Create HTML for the search results. - - Args: - search_results: The search results. - - Returns: - str: The HTML. - """ - html = "" - for result in search_results: - if ".summary" in result.content: - result_summary = add_span_with_slice(result.content[".summary"]) - feed = reader.get_feed(result.feed_url) - feed_url = encode_url(feed.url) - - html += f""" - -

{result.metadata[".title"]}

-
-
- {result_summary} -
-
- """ - return html - search_html = create_html_for_search_results(search_results) return templates.TemplateResponse( "search.html", {"request": request, "search_html": search_html, "query": query, "search_amount": search_amount} diff --git a/discord_rss_bot/search.py b/discord_rss_bot/search.py new file mode 100644 index 0000000..71f0692 --- /dev/null +++ b/discord_rss_bot/search.py @@ -0,0 +1,49 @@ +import urllib.parse +from typing import Iterable + +from reader import EntrySearchResult, HighlightedString + +from discord_rss_bot.settings import reader + + +def create_html_for_search_results(search_results: Iterable[EntrySearchResult]) -> str: + """Create HTML for the search results. + + Args: + search_results: The search results. + + Returns: + str: The HTML. + """ + html = "" + for result in search_results: + if ".summary" in result.content: + result_summary = add_span_with_slice(result.content[".summary"]) + feed = reader.get_feed(result.feed_url) + feed_url = urllib.parse.quote(feed.url) + + html += f""" + +

{result.metadata[".title"]}

+
+ {result_summary} +
+ """ + return html + + +def add_span_with_slice(highlighted_string: HighlightedString) -> str: + """Add span tags to the string to highlight the search results. + + Args: + highlighted_string: The highlighted string. + + Returns: + str: The string with added tags. + """ + + for txt_slice in highlighted_string.highlights: + before_span = f"{highlighted_string.value[: txt_slice.start]}" + span_part = f"{highlighted_string.value[txt_slice.start: txt_slice.stop]}" + after_span = f"{highlighted_string.value[txt_slice.stop:]}" + return f"{before_span}{span_part}{after_span}"