JobData/app/__init__.py
2026-03-22 23:22:30 +08:00

60 lines
1.5 KiB
Python

from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
import os
from tortoise import Tortoise
from app.core.exceptions import SettingNotFound
from app.core.init_app import (
init_data,
make_middlewares,
register_exceptions,
register_routers,
)
from app.core.clickhouse import clickhouse_manager
from app.core.scheduler import start_scheduler, shutdown_scheduler
from app.services.ingest.remote_push import close_http_client
try:
from app.settings.config import settings
except ImportError:
raise SettingNotFound("Can not import settings")
@asynccontextmanager
async def lifespan(app: FastAPI):
await Tortoise.init(config=settings.TORTOISE_ORM)
await Tortoise.generate_schemas()
await init_data()
start_scheduler()
yield
# 清理所有连接
await close_http_client()
await Tortoise.close_connections()
await clickhouse_manager.close()
shutdown_scheduler()
def create_app() -> FastAPI:
app = FastAPI(
title=settings.APP_TITLE,
description=settings.APP_DESCRIPTION,
version=settings.VERSION,
openapi_url="/openapi.json",
middleware=make_middlewares(),
lifespan=lifespan,
)
register_exceptions(app)
register_routers(app, prefix="/api")
# Mount static files
static_dir = os.path.join(settings.BASE_DIR, "static")
if os.path.exists(static_dir):
app.mount("/static", StaticFiles(directory=static_dir), name="static")
return app
app = create_app()