Skip to content

Commit d045e2a

Browse files
author
Andrei Neagu
committed
migrate to lifespan from setup
1 parent 4251212 commit d045e2a

File tree

4 files changed

+43
-37
lines changed

4 files changed

+43
-37
lines changed

services/notifications/src/simcore_service_notifications/api/rest/routes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from . import _health
88

99

10-
def setup_rest_api(app: FastAPI):
10+
def initialize_rest_api(app: FastAPI) -> None:
1111
app.include_router(_health.router)
1212

1313
app.add_exception_handler(Exception, handle_errors_as_500)
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
from collections.abc import AsyncIterator
2+
13
from fastapi import FastAPI
4+
from fastapi_lifespan_manager import State
25
from models_library.api_schemas_notifications import NOTIFICATIONS_RPC_NAMESPACE
36
from servicelib.rabbitmq import RPCRouter
47

@@ -9,11 +12,10 @@
912
]
1013

1114

12-
def setup_rpc_api_routes(app: FastAPI) -> None:
13-
async def startup() -> None:
14-
rpc_server = get_rabbitmq_rpc_server(app)
15+
async def lifespan_rpc_api_routes(app: FastAPI) -> AsyncIterator[State]:
16+
rpc_server = get_rabbitmq_rpc_server(app)
1517

16-
for router in ROUTERS:
17-
await rpc_server.register_router(router, NOTIFICATIONS_RPC_NAMESPACE, app)
18+
for router in ROUTERS:
19+
await rpc_server.register_router(router, NOTIFICATIONS_RPC_NAMESPACE, app)
1820

19-
app.add_event_handler("startup", startup)
21+
yield {}
Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import logging
2+
from collections.abc import AsyncIterator
23

34
from fastapi import FastAPI
5+
from fastapi_lifespan_manager import State
6+
from servicelib.fastapi.lifespan_utils import LifespanGenerator, combine_lifespans
47
from servicelib.fastapi.openapi import (
58
get_common_oas_options,
69
override_fastapi_openapi_method,
@@ -16,15 +19,15 @@
1619
SUMMARY,
1720
VERSION,
1821
)
19-
from ..api.rest.routes import setup_rest_api
20-
from ..api.rpc.routes import setup_rpc_api_routes
21-
from ..services.rabbitmq import setup_rabbitmq
22+
from ..api.rest.routes import initialize_rest_api
23+
from ..api.rpc.routes import lifespan_rpc_api_routes
24+
from ..services.rabbitmq import lifespan_rabbitmq
2225
from .settings import ApplicationSettings
2326

24-
logger = logging.getLogger(__name__)
27+
_logger = logging.getLogger(__name__)
2528

2629

27-
def _setup_logger(settings: ApplicationSettings):
30+
def _initialise_logger(settings: ApplicationSettings):
2831
# SEE https://github.com/ITISFoundation/osparc-simcore/issues/3148
2932
logging.basicConfig(level=settings.LOG_LEVEL.value) # NOSONAR
3033
logging.root.setLevel(settings.LOG_LEVEL.value)
@@ -35,10 +38,23 @@ def _setup_logger(settings: ApplicationSettings):
3538
)
3639

3740

41+
async def _lifespan_banner(app: FastAPI) -> AsyncIterator[State]:
42+
_ = app
43+
print(APP_STARTED_BANNER_MSG, flush=True) # noqa: T201
44+
yield {}
45+
print(APP_FINISHED_BANNER_MSG, flush=True) # noqa: T201
46+
47+
3848
def create_app() -> FastAPI:
3949
settings = ApplicationSettings.create_from_envs()
40-
_setup_logger(settings)
41-
logger.debug(settings.model_dump_json(indent=2))
50+
_logger.debug(settings.model_dump_json(indent=2))
51+
52+
_initialise_logger(settings)
53+
54+
lifespans: list[LifespanGenerator] = [
55+
lifespan_rabbitmq,
56+
lifespan_rpc_api_routes,
57+
]
4258

4359
assert settings.SC_BOOT_MODE # nosec
4460
app = FastAPI(
@@ -47,25 +63,15 @@ def create_app() -> FastAPI:
4763
description=SUMMARY,
4864
version=f"{VERSION}",
4965
openapi_url=f"/api/{API_VTAG}/openapi.json",
66+
lifespan=combine_lifespans(*lifespans, _lifespan_banner),
5067
**get_common_oas_options(is_devel_mode=settings.SC_BOOT_MODE.is_devel_mode()),
5168
)
5269
override_fastapi_openapi_method(app)
5370
app.state.settings = settings
5471

55-
setup_rabbitmq(app)
56-
setup_rest_api(app)
57-
setup_rpc_api_routes(app)
72+
initialize_rest_api(app)
5873

5974
if settings.NOTIFICATIONS_TRACING:
6075
initialize_tracing(app, settings.NOTIFICATIONS_TRACING, APP_NAME)
6176

62-
async def _on_startup() -> None:
63-
print(APP_STARTED_BANNER_MSG, flush=True) # noqa: T201
64-
65-
async def _on_shutdown() -> None:
66-
print(APP_FINISHED_BANNER_MSG, flush=True) # noqa: T201
67-
68-
app.add_event_handler("startup", _on_startup)
69-
app.add_event_handler("shutdown", _on_shutdown)
70-
7177
return app

services/notifications/src/simcore_service_notifications/services/rabbitmq.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,25 @@
1+
from collections.abc import AsyncIterator
12
from typing import cast
23

34
from fastapi import FastAPI
5+
from fastapi_lifespan_manager import State
46
from servicelib.rabbitmq import RabbitMQRPCClient, wait_till_rabbitmq_responsive
57
from settings_library.rabbit import RabbitSettings
68

79

8-
def setup_rabbitmq(app: FastAPI) -> None:
10+
async def lifespan_rabbitmq(app: FastAPI) -> AsyncIterator[State]:
911
settings: RabbitSettings = app.state.settings.NOTIFICATIONS_RABBITMQ
1012
app.state.rabbitmq_rpc_server = None
1113

12-
async def _on_startup() -> None:
13-
await wait_till_rabbitmq_responsive(settings.dsn)
14+
await wait_till_rabbitmq_responsive(settings.dsn)
1415

15-
app.state.rabbitmq_rpc_server = await RabbitMQRPCClient.create(
16-
client_name="dynamic_scheduler_rpc_server", settings=settings
17-
)
16+
app.state.rabbitmq_rpc_server = await RabbitMQRPCClient.create(
17+
client_name="dynamic_scheduler_rpc_server", settings=settings
18+
)
1819

19-
async def _on_shutdown() -> None:
20-
if app.state.rabbitmq_rpc_server:
21-
await app.state.rabbitmq_rpc_server.close()
20+
yield {}
2221

23-
app.add_event_handler("startup", _on_startup)
24-
app.add_event_handler("shutdown", _on_shutdown)
22+
await app.state.rabbitmq_rpc_server.close()
2523

2624

2725
def get_rabbitmq_rpc_server(app: FastAPI) -> RabbitMQRPCClient:

0 commit comments

Comments
 (0)