refactor/database init on startup

This commit is contained in:
hay-kot 2021-02-21 12:50:14 -09:00
commit 25c1350458
7 changed files with 74 additions and 94 deletions

View file

@ -3,6 +3,8 @@ from fastapi import FastAPI
# import utils.startup as startup
from app_config import APP_VERSION, PORT, SECRET, docs_url, redoc_url
from db.db_setup import sql_exists
from db.init_db import init_db
from routes import (
backup_routes,
debug_routes,
@ -18,7 +20,6 @@ from routes.recipe import (
tag_routes,
)
from routes.users import users
from services.settings_services import default_settings_init
from utils.logger import logger
app = FastAPI(
@ -30,16 +31,14 @@ app = FastAPI(
)
def data_base_first_run():
init_db()
def start_scheduler():
import services.scheduler.scheduled_jobs
def init_settings():
default_settings_init()
import services.theme_services
import services.users.users
def api_routers():
# Authentication
app.include_router(users.router)
@ -60,9 +59,11 @@ def api_routers():
app.include_router(debug_routes.router)
if not sql_exists:
data_base_first_run()
api_routers()
start_scheduler()
init_settings()
if __name__ == "__main__":
logger.info("-----SYSTEM STARTUP-----")

64
mealie/db/init_db.py Normal file
View file

@ -0,0 +1,64 @@
from fastapi.logger import logger
from models.settings_models import SiteSettings, Webhooks
from sqlalchemy.orm import Session
from sqlalchemy.orm.session import Session
from utils.logger import logger
from db.database import db
from db.db_setup import create_session
def init_db(db: Session = None) -> None:
if not db:
db = create_session()
default_settings_init(db)
default_theme_init(db)
default_user_init(db)
db.close()
def default_theme_init(session: Session):
default_theme = {
"name": "default",
"colors": {
"primary": "#E58325",
"accent": "#00457A",
"secondary": "#973542",
"success": "#5AB1BB",
"info": "#4990BA",
"warning": "#FF4081",
"error": "#EF5350",
},
}
try:
db.themes.create(session, default_theme)
logger.info("Generating default theme...")
except:
logger.info("Default Theme Exists.. skipping generation")
def default_settings_init(session: Session):
try:
webhooks = Webhooks()
default_entry = SiteSettings(name="main", webhooks=webhooks)
document = db.settings.create(session, default_entry.dict())
logger.info(f"Created Site Settings: \n {document}")
except:
pass
def default_user_init(session: Session):
default_user = {
"full_name": "Change Me",
"email": "changeme@email.com",
"password": "MyPassword",
"family": "public",
"is_superuser": True,
}
logger.info("Generating Default User")
db.users.create(session, default_user)

View file

@ -2,7 +2,6 @@ from db.database import db
from db.db_setup import generate_session
from fastapi import APIRouter, Depends
from models.settings_models import SiteSettings
from services.settings_services import default_settings_init
from sqlalchemy.orm.session import Session
from utils.post_webhooks import post_webhooks
from utils.snackbar import SnackResponse
@ -17,8 +16,7 @@ def get_main_settings(session: Session = Depends(generate_session)):
try:
data = db.settings.get(session, "main")
except:
default_settings_init(session)
data = db.settings.get(session, "main")
return
return data

View file

@ -1,17 +0,0 @@
from db.database import db
from db.db_setup import create_session
from models.settings_models import SiteSettings, Webhooks
from sqlalchemy.orm.session import Session
from utils.logger import logger
def default_settings_init(session: Session = None):
if session == None:
session = create_session()
try:
webhooks = Webhooks()
default_entry = SiteSettings(name="main", webhooks=webhooks)
document = db.settings.create(session, default_entry.dict())
logger.info(f"Created Site Settings: \n {document}")
except:
pass

View file

@ -1,28 +0,0 @@
from db.database import db
from db.db_setup import create_session, sql_exists
from utils.logger import logger
def default_theme_init():
default_theme = {
"name": "default",
"colors": {
"primary": "#E58325",
"accent": "#00457A",
"secondary": "#973542",
"success": "#5AB1BB",
"info": "#4990BA",
"warning": "#FF4081",
"error": "#EF5350",
},
}
session = create_session()
try:
db.themes.create(session, default_theme)
logger.info("Generating default theme...")
except:
logger.info("Default Theme Exists.. skipping generation")
if not sql_exists:
default_theme_init()

View file

@ -1,25 +0,0 @@
from db.database import db
from db.db_setup import create_session, sql_exists
from fastapi.logger import logger
def init_super_user():
session = create_session()
default_user = {
"full_name": "Change Me",
"email": "changeme@email.com",
"password": "MyPassword",
"family": "public",
"is_superuser": True,
}
logger.info("Generating Default User")
db.users.create(session, default_user)
session.close()
if not sql_exists:
init_super_user()

View file

@ -1,13 +0,0 @@
from pathlib import Path
from services.settings_services import default_theme_init
CWD = Path(__file__).parent
def post_start():
default_theme_init()
if __name__ == "__main__":
pass