mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-11-01 18:53:59 -04:00
* feat(frontend): 💄 add recipe title * fix(frontend): 🐛 fixes #722 side-bar issue * feat(frontend): ✨ Add page titles to all pages * minor cleanup * refactor(backend): ♻️ rewrite scheduler to be more modulare and work * feat(frontend): ✨ start password reset functionality * refactor(backend): ♻️ refactor application settings to facilitate dependency injection * refactor(backend): 🔥 remove RECIPE_SETTINGS env variables in favor of group settings * formatting * refactor(backend): ♻️ align naming convention * feat(backend): ✨ password reset * test(backend): ✅ password reset * feat(frontend): ✨ self-service password reset * purge password schedule * update user creation for tests Co-authored-by: Hayden <hay-kot@pm.me>
66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
from abc import ABC, abstractproperty
|
|
from pathlib import Path
|
|
|
|
from pydantic import BaseModel, BaseSettings, PostgresDsn
|
|
|
|
|
|
class AbstractDBProvider(ABC):
|
|
@abstractproperty
|
|
def db_url(self) -> str:
|
|
pass
|
|
|
|
@property
|
|
def db_url_public(self) -> str:
|
|
pass
|
|
|
|
|
|
class SQLiteProvider(AbstractDBProvider, BaseModel):
|
|
data_dir: Path
|
|
prefix: str = ""
|
|
|
|
@property
|
|
def db_path(self):
|
|
return self.data_dir / f"{self.prefix}mealie.db"
|
|
|
|
@property
|
|
def db_url(self) -> str:
|
|
return "sqlite:///" + str(self.db_path.absolute())
|
|
|
|
@property
|
|
def db_url_public(self) -> str:
|
|
return self.db_url
|
|
|
|
|
|
class PostgresProvider(AbstractDBProvider, BaseSettings):
|
|
POSTGRES_USER: str = "mealie"
|
|
POSTGRES_PASSWORD: str = "mealie"
|
|
POSTGRES_SERVER: str = "postgres"
|
|
POSTGRES_PORT: str = 5432
|
|
POSTGRES_DB: str = "mealie"
|
|
|
|
@property
|
|
def db_url(self) -> str:
|
|
host = f"{self.POSTGRES_SERVER}:{self.POSTGRES_PORT}"
|
|
return PostgresDsn.build(
|
|
scheme="postgresql",
|
|
user=self.POSTGRES_USER,
|
|
password=self.POSTGRES_PASSWORD,
|
|
host=host,
|
|
path=f"/{self.POSTGRES_DB or ''}",
|
|
)
|
|
|
|
@property
|
|
def db_url_public(self) -> str:
|
|
user = self.POSTGRES_USER
|
|
password = self.POSTGRES_PASSWORD
|
|
return self.db_url.replace(user, "*****", 1).replace(password, "*****", 1)
|
|
|
|
|
|
def db_provider_factory(provider_name: str, data_dir: Path, env_file: Path, env_encoding="utf-8") -> AbstractDBProvider:
|
|
if provider_name == "sqlite":
|
|
return SQLiteProvider(data_dir=data_dir)
|
|
elif provider_name == "postgres":
|
|
return PostgresProvider(_env_file=env_file, _env_file_encoding=env_encoding)
|
|
else:
|
|
return
|