import re from pathlib import Path from jinja2 import Template from loguru import logger from ..config.tables import TEMPLATE_VARS class QueryLoader: def __init__(self, template_vars: dict[str, str] | None = None): self.template_vars = template_vars or TEMPLATE_VARS def load(self, path: Path, **params: str) -> str: logger.debug(f"Loading query from {path}") with open(path, "r") as f: template = Template(f.read()) return template.render(**self.template_vars, **params) def load_with_date(self, path: Path, date: str) -> str: return self.load(path, date=f"'{date}'") def to_sql_string(values: list[str]) -> str: """Convert a list of strings into a SQL IN-clause string. Example: >>> to_sql_string(["abc", "de'f"]) "('abc','de''f')" """ escaped = [re.sub("'", "''", str(x)) for x in values] return "(" + ",".join(f"'{x}'" for x in escaped) + ")"