···11+create table if not exists pdss (
22+ name text not null unique,
33+ url text not null unique,
44+ relevance integer not null
55+) strict;
66+77+create index if not exists pdss_by_relevance on pdss(relevance desc);
+18-12
src/db.py
···11import sqlite3
22from logging import Logger
33from sqlite3 import Connection
44-from typing import Generic, cast, override
44+from typing import Generic, Literal, cast, override
5566from flask import Flask, g
77···1515 prefix: str
16161717 def __init__(self, app: Connection | Flask, logger: Logger, prefix: str):
1818- self.db = app if isinstance(app, Connection) else get_db(app)
1818+ self.db = app if isinstance(app, Connection) else get_db(app, name="keyval")
1919 self.logger = logger
2020 self.prefix = prefix
2121···4242 self.db.commit()
434344444545-def get_db(app: Flask) -> sqlite3.Connection:
4646- db: sqlite3.Connection | None = g.get("db", None)
4545+type DatabaseName = Literal["config"] | Literal["keyval"]
4646+4747+4848+def get_db(app: Flask, name: DatabaseName) -> sqlite3.Connection:
4949+ global_key = f"{name}_db"
5050+ db: sqlite3.Connection | None = g.get(global_key, None)
4751 if db is None:
4848- db_path: str = app.config.get("DATABASE_URL", "ligoat.db")
4949- db = g.db = sqlite3.connect(db_path, check_same_thread=False)
5252+ db_path: str = app.config[f"{name.upper()}_DB_URL"]
5353+ db = sqlite3.connect(db_path, check_same_thread=False)
5454+ setattr(g, global_key, db)
5055 # return rows as dict-like objects
5156 db.row_factory = sqlite3.Row
5257 return db
535854595560def close_db_connection(_exception: BaseException | None):
5656- db: sqlite3.Connection | None = g.get("db", None)
5757- if db is not None:
5858- db.close()
6161+ for name in ["keyval", "config"]:
6262+ db: sqlite3.Connection | None = g.pop(f"{name}_db", None)
6363+ if db is not None:
6464+ db.close()
596560666161-def init_db(app: Flask):
6767+def init_db(app: Flask, name: DatabaseName) -> None:
6268 with app.app_context():
6363- db = get_db(app)
6464- with app.open_resource("schema.sql", mode="r") as schema:
6969+ db = get_db(app, name)
7070+ with app.open_resource(f"{name}.sql", mode="r") as schema:
6571 _ = db.cursor().executescript(schema.read())
6672 db.commit()