feat: Quart app factory with health endpoint
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
from __future__ import annotations
|
||||
from pathlib import Path
|
||||
from quart import Quart
|
||||
from .config import load_config
|
||||
from .database import init_db
|
||||
|
||||
|
||||
def create_app(
|
||||
config_path: Path | str | None = None,
|
||||
testing: bool = False,
|
||||
) -> Quart:
|
||||
app = Quart(__name__, template_folder="templates")
|
||||
|
||||
# Load config
|
||||
cfg = load_config(config_path)
|
||||
app.config.update(
|
||||
SECRET_KEY=cfg["secret_key"],
|
||||
DATABASE_URL=cfg["database"]["url"],
|
||||
SESSION_LIFETIME_HOURS=cfg.get("session", {}).get("lifetime_hours", 8),
|
||||
DATA_RETENTION_DAYS=cfg.get("data", {}).get("retention_days", 90),
|
||||
PLUGIN_DIR=cfg.get("plugin_dir", "plugins"),
|
||||
PLUGINS=cfg.get("plugins", {}),
|
||||
SMTP=cfg.get("smtp", {}),
|
||||
WEBHOOK=cfg.get("webhook", {}),
|
||||
TESTING=testing,
|
||||
_RAW_CFG=cfg,
|
||||
)
|
||||
|
||||
# Database
|
||||
if not testing:
|
||||
init_db(app)
|
||||
else:
|
||||
from unittest.mock import MagicMock
|
||||
app.db_sessionmaker = MagicMock()
|
||||
|
||||
# Register blueprints
|
||||
from .auth.routes import auth_bp
|
||||
app.register_blueprint(auth_bp)
|
||||
|
||||
from .dashboard.routes import dashboard_bp
|
||||
app.register_blueprint(dashboard_bp)
|
||||
|
||||
# Health check
|
||||
@app.get("/health")
|
||||
async def health():
|
||||
return {"status": "ok"}
|
||||
|
||||
return app
|
||||
Reference in New Issue
Block a user