···1+create table if not exists pdss (
2+ name text not null unique,
3+ url text not null unique,
4+ relevance integer not null
5+) strict;
6+7+create index if not exists pdss_by_relevance on pdss(relevance desc);
+18-12
src/db.py
···1import sqlite3
2from logging import Logger
3from sqlite3 import Connection
4-from typing import Generic, cast, override
56from flask import Flask, g
7···15 prefix: str
1617 def __init__(self, app: Connection | Flask, logger: Logger, prefix: str):
18- self.db = app if isinstance(app, Connection) else get_db(app)
19 self.logger = logger
20 self.prefix = prefix
21···42 self.db.commit()
434445-def get_db(app: Flask) -> sqlite3.Connection:
46- db: sqlite3.Connection | None = g.get("db", None)
000047 if db is None:
48- db_path: str = app.config.get("DATABASE_URL", "ligoat.db")
49- db = g.db = sqlite3.connect(db_path, check_same_thread=False)
050 # return rows as dict-like objects
51 db.row_factory = sqlite3.Row
52 return db
535455def close_db_connection(_exception: BaseException | None):
56- db: sqlite3.Connection | None = g.get("db", None)
57- if db is not None:
58- db.close()
0596061-def init_db(app: Flask):
62 with app.app_context():
63- db = get_db(app)
64- with app.open_resource("schema.sql", mode="r") as schema:
65 _ = db.cursor().executescript(schema.read())
66 db.commit()
···1import sqlite3
2from logging import Logger
3from sqlite3 import Connection
4+from typing import Generic, Literal, cast, override
56from flask import Flask, g
7···15 prefix: str
1617 def __init__(self, app: Connection | Flask, logger: Logger, prefix: str):
18+ self.db = app if isinstance(app, Connection) else get_db(app, name="keyval")
19 self.logger = logger
20 self.prefix = prefix
21···42 self.db.commit()
434445+type DatabaseName = Literal["config"] | Literal["keyval"]
46+47+48+def get_db(app: Flask, name: DatabaseName) -> sqlite3.Connection:
49+ global_key = f"{name}_db"
50+ db: sqlite3.Connection | None = g.get(global_key, None)
51 if db is None:
52+ db_path: str = app.config[f"{name.upper()}_DB_URL"]
53+ db = sqlite3.connect(db_path, check_same_thread=False)
54+ setattr(g, global_key, db)
55 # return rows as dict-like objects
56 db.row_factory = sqlite3.Row
57 return db
585960def close_db_connection(_exception: BaseException | None):
61+ for name in ["keyval", "config"]:
62+ db: sqlite3.Connection | None = g.pop(f"{name}_db", None)
63+ if db is not None:
64+ db.close()
656667+def init_db(app: Flask, name: DatabaseName) -> None:
68 with app.app_context():
69+ db = get_db(app, name)
70+ with app.open_resource(f"{name}.sql", mode="r") as schema:
71 _ = db.cursor().executescript(schema.read())
72 db.commit()