33 lines
824 B
Python
33 lines
824 B
Python
from __future__ import annotations
|
|
|
|
import pathlib
|
|
import uuid
|
|
from datetime import datetime, timezone
|
|
|
|
import aiosqlite
|
|
|
|
from server.settings import settings
|
|
|
|
SCHEMA_PATH = str(pathlib.Path(__file__).resolve().parents[1] / "tools" / "schema.sql")
|
|
|
|
|
|
def new_id() -> str:
|
|
return str(uuid.uuid4())
|
|
|
|
|
|
def utc_now_iso() -> str:
|
|
return datetime.now(timezone.utc).replace(microsecond=0).isoformat()
|
|
|
|
|
|
async def get_db() -> aiosqlite.Connection:
|
|
pathlib.Path(settings.db_path).parent.mkdir(parents=True, exist_ok=True)
|
|
db = await aiosqlite.connect(settings.db_path)
|
|
await db.execute("PRAGMA foreign_keys = ON;")
|
|
return db
|
|
|
|
|
|
async def ensure_schema(db: aiosqlite.Connection) -> None:
|
|
schema = pathlib.Path(SCHEMA_PATH).read_text(encoding="utf-8")
|
|
await db.executescript(schema)
|
|
await db.commit()
|