From b63956c08fd8c0a6868b24200a48557622673592 Mon Sep 17 00:00:00 2001 From: Kharec Date: Tue, 6 Jan 2026 12:56:26 +0100 Subject: [PATCH] feat: add search helper module --- auditui/search_utils.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 auditui/search_utils.py diff --git a/auditui/search_utils.py b/auditui/search_utils.py new file mode 100644 index 0000000..32e1b48 --- /dev/null +++ b/auditui/search_utils.py @@ -0,0 +1,34 @@ +"""Search helpers for filtering library items.""" + +from __future__ import annotations + +from typing import Callable + +from .library import LibraryClient + + +def build_search_text(item: dict, library_client: LibraryClient | None) -> str: + """Build a lowercase search string for an item.""" + if library_client: + title = library_client.extract_title(item) + authors = library_client.extract_authors(item) + else: + title = item.get("title", "") + authors = ", ".join( + a.get("name", "") + for a in item.get("authors", []) + if isinstance(a, dict) and a.get("name") + ) + return f"{title} {authors}".lower() + + +def filter_items( + items: list[dict], + filter_text: str, + get_search_text: Callable[[dict], str], +) -> list[dict]: + """Filter items by a search string.""" + if not filter_text: + return items + filter_lower = filter_text.lower() + return [item for item in items if filter_lower in get_search_text(item)]