From 20af991841c949ecfea8f190eb6845ab2c609b1e Mon Sep 17 00:00:00 2001 From: William Peebles Date: Thu, 23 Mar 2023 20:57:37 -0400 Subject: [PATCH 1/2] add table detection logic --- app/app.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/app.py b/app/app.py index 73dc8d7..0b5c3a4 100644 --- a/app/app.py +++ b/app/app.py @@ -84,7 +84,20 @@ def podStatus(): # Index route @app.route('/') def index(): - return redirect('/events') + # Check for empty database, go to setup page if not setup + global tablesSetup + required_tables = ['period', 'task', 'event', 'user'] + for table in required_tables: + if table in db.metadata.tables: + tablesSetup = True + else: + tablesSetup = False + break + if not tablesSetup: + return "" + # Otherwise, redirect to /events + else: + return redirect('/events') # Authentication routes @app.route('/login', methods=['GET', 'POST']) -- 2.49.1 From 99dc76b25a92cf02cf5ecaa5bba32e8b11e89cdd Mon Sep 17 00:00:00 2001 From: William Peebles Date: Thu, 23 Mar 2023 22:19:03 -0400 Subject: [PATCH 2/2] check for empty database before begin --- app/app.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/app/app.py b/app/app.py index 0b5c3a4..785adb7 100644 --- a/app/app.py +++ b/app/app.py @@ -6,6 +6,7 @@ from werkzeug.security import generate_password_hash, check_password_hash from flask_login import (LoginManager, login_user, login_required, logout_user, current_user) from misc import datetime, date, time, currDay, prevDay, ZoneInfo, currVersion, currCommit from db import (db, Period, Task, Event, User) +from sqlalchemy import inspect from forms import (TaskForm, EventForm, PeriodForm, SignupForm, LoginForm, SettingsForm) from create_events import createEvents from log import appLogger @@ -82,19 +83,19 @@ def podStatus(): return blankPage, 500 # Index route -@app.route('/') +@app.route('/', methods=['GET', 'POST']) def index(): # Check for empty database, go to setup page if not setup global tablesSetup required_tables = ['period', 'task', 'event', 'user'] - for table in required_tables: - if table in db.metadata.tables: - tablesSetup = True - else: - tablesSetup = False - break + inspector = inspect(db.engine) + tables = inspector.get_table_names() + tablesSetup = all(table in tables for table in required_tables) if not tablesSetup: - return "" + # Initial setup page, should only appear if database is ready but not set up + db.create_all() + logger.info('DB initialized on first run') + return redirect(url_for('createAccount')) # Otherwise, redirect to /events else: return redirect('/events') @@ -138,7 +139,7 @@ def createAccount(): return redirect(url_for('login')) return render_template('createAccount.html', form=form) else: - return 'Account creation is currently disabled' + return 'Account creation is currently disabled.
Set env var SIGNUP_ENABLED=YES to enable account creation' @app.route('/logout') @login_required def logout(): -- 2.49.1