Files
folkugat-web/folkugat_web/dal/sql/temes/query.py
2025-03-16 18:45:08 +01:00

49 lines
1.4 KiB
Python

from typing import Optional
from folkugat_web.dal.sql import Connection, get_connection
from folkugat_web.model import temes as model
from ._conversion import cell_to_ngrams, row_to_tema
TEMA_ID_TO_NGRAMS_CACHE = None
def get_tema_by_id(tema_id: int, con: Optional[Connection] = None) -> Optional[model.Tema]:
query = """
SELECT
id, title, properties, links, lyrics, alternatives, ngrams,
creation_date, modification_date, hidden
FROM temes
WHERE id = :id
"""
data = dict(id=tema_id)
with get_connection(con) as con:
cur = con.cursor()
cur.execute(query, data)
row = cur.fetchone()
return row_to_tema(row) if row else None
def evict_tema_id_to_ngrams_cache():
global TEMA_ID_TO_NGRAMS_CACHE
TEMA_ID_TO_NGRAMS_CACHE = None
def get_tema_id_to_ngrams(con: Optional[Connection] = None) -> dict[int, model.NGrams]:
global TEMA_ID_TO_NGRAMS_CACHE
if TEMA_ID_TO_NGRAMS_CACHE is None:
TEMA_ID_TO_NGRAMS_CACHE = _get_tema_id_to_ngrams(con)
return TEMA_ID_TO_NGRAMS_CACHE
def _get_tema_id_to_ngrams(con: Optional[Connection] = None) -> dict[int, model.NGrams]:
query = """
SELECT id, ngrams
FROM temes
"""
with get_connection(con) as con:
cur = con.cursor()
cur.execute(query)
rows = cur.fetchall()
return {id_: cell_to_ngrams(ng) for id_, ng in rows}