From 401f08dba81031b9b87d65c6d1c3c2792fc844f6 Mon Sep 17 00:00:00 2001 From: hay-kot Date: Thu, 29 Apr 2021 22:38:16 -0800 Subject: [PATCH] init db if super user doesn't exist --- mealie/core/config.py | 33 ++++++++++++++++++++++++++------- mealie/db/db_setup.py | 2 -- mealie/db/init_db.py | 6 ++++-- template.env | 8 +++++--- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/mealie/core/config.py b/mealie/core/config.py index 6685e9634..fab2b6b98 100644 --- a/mealie/core/config.py +++ b/mealie/core/config.py @@ -1,10 +1,10 @@ import os import secrets from pathlib import Path -from typing import Optional +from typing import Any, Optional, Union import dotenv -from pydantic import BaseSettings, Field +from pydantic import BaseSettings, Field, PostgresDsn, validator APP_VERSION = "v0.5.0beta" DB_VERSION = "v0.5.0" @@ -82,9 +82,13 @@ class AppDirectories: app_dirs = AppDirectories(CWD, DATA_DIR) -def determine_sqlite_path() -> str: +def determine_sqlite_path(path=False) -> str: global app_dirs - db_path = app_dirs.DATA_DIR.joinpath(f"mealie_{DB_VERSION}.db") # ! Temporary Until Alembic + db_path = app_dirs.DATA_DIR.joinpath(f"mealie_{DB_VERSION}.db") # ! Temporary Until Alembic + + if path: + return db_path + return "sqlite:///" + str(db_path.absolute()) @@ -104,9 +108,24 @@ class AppSettings(BaseSettings): return "/redoc" if self.API_DOCS else None SECRET: str = determine_secrets(DATA_DIR, PRODUCTION) - DB_URL: str = Field(default_factory=determine_sqlite_path) - DB_USERNAME: str = 'mealie' - DB_PASSWORD: str = 'mealie' + + DB_URL: Union[str, PostgresDsn] + POSTGRES_USER: str = "mealie" + POSTGRES_PASSWORD: str = "mealie" + POSTGRES_SERVER: str = "postgres" + POSTGRES_DB: str = "mealie" + + @validator("DB_URL", pre=True) + def assemble_db_connection(cls, v: Optional[str], values: dict[str, Any]) -> Any: + if isinstance(v, str): + return determine_sqlite_path() + return PostgresDsn.build( + scheme="postgresql", + user=values.get("POSTGRES_USER"), + password=values.get("POSTGRES_PASSWORD"), + host=values.get("POSTGRES_SERVER"), + path=f"/{values.get('POSTGRES_DB') or ''}", + ) DEFAULT_GROUP: str = "Home" DEFAULT_EMAIL: str = "changeme@email.com" diff --git a/mealie/db/db_setup.py b/mealie/db/db_setup.py index ecca4a4b6..c9aa15c8a 100644 --- a/mealie/db/db_setup.py +++ b/mealie/db/db_setup.py @@ -4,9 +4,7 @@ from mealie.core.config import settings from mealie.db.models.db_session import sql_global_init from sqlalchemy.orm.session import Session -sql_exists = True -sql_exists = Path(settings.DB_URL).is_file() SessionLocal = sql_global_init(settings.DB_URL) diff --git a/mealie/db/init_db.py b/mealie/db/init_db.py index f040ebe4a..0fb68948b 100644 --- a/mealie/db/init_db.py +++ b/mealie/db/init_db.py @@ -2,7 +2,7 @@ from mealie.core import root_logger from mealie.core.config import settings from mealie.core.security import get_password_hash from mealie.db.database import db -from mealie.db.db_setup import create_session, sql_exists +from mealie.db.db_setup import create_session, sqlite_exists from mealie.schema.settings import SiteSettings from mealie.schema.theme import SiteTheme from sqlalchemy.orm import Session @@ -51,7 +51,9 @@ def default_user_init(session: Session): def main(): - if sql_exists: + session = create_session() + init_user = db.users.get(session, "1", "id") + if init_user: print("Database Exists") else: print("Database Doesn't Exists, Initializing...") diff --git a/template.env b/template.env index b0830ff38..c61a1e77a 100644 --- a/template.env +++ b/template.env @@ -15,9 +15,11 @@ API_PORT=9000 API_DOCS=True # Sets the Database type to use. -# DB_URL -DB_USERNAME=mealie -DB_PASSWORD=mealie +DB_URL=sqlite +# POSTGRES_USER +# POSTGRES_PASSWORD +# POSTGRES_SERVER +# POSTGRES_DB # Sets the token expiration time in hours. TOKEN_TIME=24