From 78217b0a98b475af1596ab5d8300e9a85ea72b65 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Wed, 11 Jun 2025 14:11:56 -0500 Subject: Enable server-side searching. --- uploader/publications/models.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'uploader/publications/models.py') diff --git a/uploader/publications/models.py b/uploader/publications/models.py index 2b0339b..992ebfa 100644 --- a/uploader/publications/models.py +++ b/uploader/publications/models.py @@ -1,6 +1,6 @@ """Module to handle persistence and retrieval of publication to/from MariaDB""" import logging -from typing import Iterable +from typing import Iterable, Optional from MySQLdb.cursors import DictCursor @@ -69,10 +69,21 @@ def update_publications(conn: Connection , publications: tuple[dict, ...]) -> tu return tuple() -def fetch_publications(conn: Connection) -> Iterable[dict]: +def fetch_publications( + conn: Connection, + search: Optional[str] = None +) -> Iterable[dict]: """Fetch publications from the database.""" + _query = "SELECT * FROM Publication" + _params = None + if search is not None and bool(search): + _query = (f"{_query} " + "WHERE CONCAT(PubMed_ID, ' ', Authors, ' ', Title) " + "LIKE %s") + _params = (f"%{search}%",) with conn.cursor(cursorclass=DictCursor) as cursor: - cursor.execute("SELECT * FROM Publication") + cursor.execute(_query, _params) + debug_query(_query, logger) for row in cursor.fetchall(): yield dict(row) -- cgit v1.2.3