From bab4893709e736e30f208a810b46d21aed6cef0e Mon Sep 17 00:00:00 2001
From: ubq323 <ubq323>
Date: Fri, 21 May 2021 16:34:45 +0000
Subject: database infrastructure

---
 .fossil-settings/ignore-glob |  1 +
 apioforum/__init__.py        |  9 +++++++++
 apioforum/db.py              | 40 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 50 insertions(+)
 create mode 100644 apioforum/db.py

diff --git a/.fossil-settings/ignore-glob b/.fossil-settings/ignore-glob
index f166c18..8c284f4 100644
--- a/.fossil-settings/ignore-glob
+++ b/.fossil-settings/ignore-glob
@@ -1,2 +1,3 @@
 venv/*
+*.db
 *.py[cod]
diff --git a/apioforum/__init__.py b/apioforum/__init__.py
index 0ea397f..6d4e53d 100644
--- a/apioforum/__init__.py
+++ b/apioforum/__init__.py
@@ -2,12 +2,21 @@
 # yay
 
 from flask import Flask
+from .db import get_db
 
 def create_app():
     app = Flask(__name__)
 
+    from . import db
+    db.init_app(app)
+
     @app.route("/")
     def main():
         return "the"
 
+    @app.route("/b")
+    def b():
+        db=get_db()
+        return str(db.execute("select 2 + 2;").fetchone()[0])
+
     return app
diff --git a/apioforum/db.py b/apioforum/db.py
new file mode 100644
index 0000000..be2d7e0
--- /dev/null
+++ b/apioforum/db.py
@@ -0,0 +1,40 @@
+import sqlite3
+import click
+from flask import current_app, g
+from flask.cli import with_appcontext
+
+def get_db():
+    if 'db' not in g:
+        g.db = sqlite3.connect('database.db',detect_types=sqlite3.PARSE_DECLTYPES)
+        g.db.row_factory = sqlite3.Row
+    g.db.execute("PRAGMA foreighn_keys = ON;")
+    return g.db
+
+def close_db(e=None):
+    db = g.pop('db', None)
+    if db is not None:
+        db.close()
+
+migrations = [
+]
+
+def init_db():
+    db = get_db()
+    version = db.execute("PRAGMA user_version;").fetchone()[0]
+    for i in range(version, len(migrations)):
+        db.executescript(migrations[i])
+        db.execute(f"PRAGMA user_version = {i+1}")
+        db.commit()
+        click.echo(f"migration {i}")
+
+@click.command("migrate")
+@with_appcontext
+def migrate_command():
+    """update database scheme etc"""
+    init_db()
+    click.echo("ok")
+
+def init_app(app):
+    app.teardown_appcontext(close_db)
+    app.cli.add_command(migrate_command)
+
-- 
cgit v1.2.3