presenton/electron/servers/fastapi/api/main.py

85 lines
2.4 KiB
Python

import os
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
import sentry_sdk
from api.lifespan import app_lifespan
from api.middlewares import UserConfigEnvUpdateMiddleware
from api.v1.ppt.router import API_V1_PPT_ROUTER
from api.v1.webhook.router import API_V1_WEBHOOK_ROUTER
from api.v1.mock.router import API_V1_MOCK_ROUTER
from utils.get_env import (
get_app_data_directory_env,
get_sentry_send_default_pii_env,
get_sentry_traces_sample_rate_env,
)
from utils.path_helpers import get_resource_path
FASTAPI_SENTRY_DSN = "https://a7831b44cb7096645e4b7569f53d070c@o4509882707410944.ingest.us.sentry.io/4511171447947264"
def _get_sentry_traces_sample_rate() -> float:
traces_sample_rate = get_sentry_traces_sample_rate_env()
if traces_sample_rate is None:
return 1.0
try:
return float(traces_sample_rate)
except ValueError:
return 1.0
def _get_sentry_send_default_pii() -> bool:
send_default_pii = get_sentry_send_default_pii_env()
if send_default_pii is None:
return True
return send_default_pii.lower() == "true"
sentry_sdk.init(
dsn=FASTAPI_SENTRY_DSN,
send_default_pii=_get_sentry_send_default_pii(),
traces_sample_rate=_get_sentry_traces_sample_rate(),
)
app = FastAPI(lifespan=app_lifespan)
# Routers
app.include_router(API_V1_PPT_ROUTER)
app.include_router(API_V1_WEBHOOK_ROUTER)
app.include_router(API_V1_MOCK_ROUTER)
# Mount app_data directory as static files
app_data_dir = get_app_data_directory_env()
if app_data_dir:
os.makedirs(app_data_dir, exist_ok=True)
app.mount("/app_data", StaticFiles(directory=app_data_dir), name="app_data")
# Mount static directory for icons, placeholder images, etc.
static_dir = get_resource_path("static")
print(f"[FastAPI] Static directory path: {static_dir}")
print(f"[FastAPI] Static directory exists: {os.path.exists(static_dir)}")
if os.path.exists(static_dir):
app.mount("/static", StaticFiles(directory=static_dir), name="static")
print(f"[FastAPI] Static files mounted successfully from {static_dir}")
else:
print(f"[FastAPI] WARNING: Static directory not found at {static_dir}")
# Middlewares
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.add_middleware(UserConfigEnvUpdateMiddleware)