aboutsummaryrefslogtreecommitdiffstats
path: root/snag/db.py
diff options
context:
space:
mode:
Diffstat (limited to 'snag/db.py')
-rw-r--r--snag/db.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/snag/db.py b/snag/db.py
new file mode 100644
index 0000000..56e3306
--- /dev/null
+++ b/snag/db.py
@@ -0,0 +1,41 @@
+# snag
+# Matt Kohls
+# (c) 2023
+
+import sqlite3
+
+import click
+from flask import current_app, g
+
+def get_db():
+ if 'db' not in g:
+ g.db = sqlite3.connect(
+ current_app.config['DATABASE'],
+ detect_types=sqlite3.PARSE_DECLTYPES
+ )
+ g.db.row_factory = sqlite3.Row
+
+ return g.db
+
+def close_db(e=None):
+ db = g.pop('db', None)
+
+ if db is not None:
+ db.close()
+
+def init_db():
+ db = get_db()
+
+ with current_app.open_resource('schema.sql') as f:
+ db.executescript(f.read().decode('utf8'))
+
+@click.command('init-db')
+def init_db_command():
+ """Clear the existing data and create new tables."""
+ init_db()
+ click.echo('Initialized the database.')
+
+def init_app(app):
+ app.teardown_appcontext(close_db)
+ app.cli.add_command(init_db_command)
+