From 8ad465bebdb9afb2ce382b3b441bb46614fcd9f4 Mon Sep 17 00:00:00 2001 From: furyhawk Date: Sun, 31 May 2026 21:45:19 +0800 Subject: [PATCH] Refactor app initialization to use async context manager for lifecycle management --- src/gateway_framework/app.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/gateway_framework/app.py b/src/gateway_framework/app.py index 997fa3c..288e160 100644 --- a/src/gateway_framework/app.py +++ b/src/gateway_framework/app.py @@ -2,8 +2,9 @@ from __future__ import annotations import json import os +from collections.abc import AsyncGenerator, Callable +from contextlib import asynccontextmanager from pathlib import Path -from typing import Callable import httpx from fastapi import FastAPI, Request @@ -96,21 +97,22 @@ def create_app(config_path: str | None = None) -> FastAPI: resolved_path = _resolve_config_path(config_path) gateway_config = load_gateway_config(resolved_path) + @asynccontextmanager + async def lifespan(app: FastAPI) -> AsyncGenerator[None]: + app.state.gateway_config = gateway_config + app.state.http_client = httpx.AsyncClient() + try: + yield + finally: + await app.state.http_client.aclose() + app = FastAPI( title=gateway_config.settings.title, version=gateway_config.settings.version, description=gateway_config.settings.description, + lifespan=lifespan, ) - @app.on_event("startup") - async def startup() -> None: - app.state.http_client = httpx.AsyncClient() - app.state.gateway_config = gateway_config - - @app.on_event("shutdown") - async def shutdown() -> None: - await app.state.http_client.aclose() - _register_management_routes(app) _register_dynamic_routes(app, gateway_config) return app