1- import contextlib
2- import typing
3-
41import fastapi
52import modern_di_fastapi
63from advanced_alchemy .exceptions import DuplicateKeyError
@@ -15,40 +12,31 @@ def include_routers(app: fastapi.FastAPI) -> None:
1512 app .include_router (ROUTER , prefix = "/api" )
1613
1714
18- class AppBuilder :
19- def __init__ (self ) -> None :
20- self .app : fastapi .FastAPI = fastapi .FastAPI (
21- lifespan = self .lifespan_manager ,
22- )
23- self .bootstrapper = FastAPIBootstrapper (
24- bootstrap_config = FastAPIConfig (
25- application = self .app ,
26- service_name = settings .service_name ,
27- service_version = settings .service_version ,
28- service_environment = settings .service_environment ,
29- service_debug = settings .service_debug ,
30- opentelemetry_endpoint = settings .opentelemetry_endpoint ,
31- sentry_dsn = settings .sentry_dsn ,
32- cors_allowed_origins = settings .cors_allowed_origins ,
33- cors_allowed_methods = settings .cors_allowed_methods ,
34- cors_allowed_headers = settings .cors_allowed_headers ,
35- cors_exposed_headers = settings .cors_exposed_headers ,
36- logging_buffer_capacity = settings .logging_buffer_capacity ,
37- swagger_offline_docs = settings .swagger_offline_docs ,
38- ),
39- )
40- self .bootstrapper .bootstrap ()
41- self .di_container = modern_di_fastapi .setup_di (self .app )
42- include_routers (self .app )
43- self .app .add_exception_handler (
44- DuplicateKeyError ,
45- exceptions .duplicate_key_error_handler , # type: ignore[arg-type]
46- )
47-
48- @contextlib .asynccontextmanager
49- async def lifespan_manager (self , _ : fastapi .FastAPI ) -> typing .AsyncIterator [dict [str , typing .Any ]]:
50- async with self .di_container :
51- yield {}
52-
53-
54- application = AppBuilder ().app
15+ def build_app () -> fastapi .FastAPI :
16+ bootstrapper = FastAPIBootstrapper (
17+ bootstrap_config = FastAPIConfig (
18+ service_name = settings .service_name ,
19+ service_version = settings .service_version ,
20+ service_environment = settings .service_environment ,
21+ service_debug = settings .service_debug ,
22+ opentelemetry_endpoint = settings .opentelemetry_endpoint ,
23+ sentry_dsn = settings .sentry_dsn ,
24+ cors_allowed_origins = settings .cors_allowed_origins ,
25+ cors_allowed_methods = settings .cors_allowed_methods ,
26+ cors_allowed_headers = settings .cors_allowed_headers ,
27+ cors_exposed_headers = settings .cors_exposed_headers ,
28+ logging_buffer_capacity = settings .logging_buffer_capacity ,
29+ swagger_offline_docs = settings .swagger_offline_docs ,
30+ ),
31+ )
32+ app : fastapi .FastAPI = bootstrapper .bootstrap ()
33+ modern_di_fastapi .setup_di (app )
34+ include_routers (app )
35+ app .add_exception_handler (
36+ DuplicateKeyError ,
37+ exceptions .duplicate_key_error_handler , # type: ignore[arg-type]
38+ )
39+ return app
40+
41+
42+ application = build_app ()
0 commit comments