Files
zwitschi 4cefd4e3ab
Some checks failed
CI / test (3.11) (push) Failing after 5m36s
CI / build-image (push) Has been skipped
v1
2025-10-22 16:48:55 +02:00

57 lines
1.5 KiB
Python

"""Application factory for the Flask server."""
from __future__ import annotations
import logging
from flask import Flask
from . import logging_config, middleware, routes, settings
from .database import init_db, is_postgres_enabled
def _configure_sentry() -> None:
if not settings.SENTRY_DSN:
return
try:
import sentry_sdk
from sentry_sdk.integrations.flask import FlaskIntegration
sentry_sdk.init(
dsn=settings.SENTRY_DSN,
integrations=[FlaskIntegration()],
traces_sample_rate=settings.SENTRY_TRACES_SAMPLE_RATE,
)
logging.info("Sentry initialized")
except Exception:
logging.exception("Failed to initialize Sentry SDK")
def create_app() -> Flask:
"""Create and configure the Flask application instance."""
logging_config.configure_logging()
if settings.POSTGRES_URL:
try:
import psycopg2 # type: ignore # noqa: F401
except Exception:
logging.warning(
"POSTGRES_URL is set but psycopg2 is not installed; falling back to SQLite"
)
app = Flask(__name__)
app.config.from_mapping(SECRET_KEY=settings.SECRET_KEY)
app.template_folder = str(settings.BASE_DIR / "templates")
middleware.register_request_hooks(app)
routes.register_blueprints(app)
try:
init_db()
except Exception:
logging.exception("Failed to initialize DB at import time")
is_postgres_enabled()
_configure_sentry()
return app