1
- from typing import Awaitable , Callable
1
+ from typing import Awaitable , Callable , Union
2
2
3
3
from fastapi import FastAPI , Request
4
4
from starlette .requests import HTTPConnection
8
8
9
9
def startup_event_generator (
10
10
broker : AsyncBroker ,
11
- app_path : str ,
11
+ app_or_path : Union [ str , FastAPI ] ,
12
12
) -> Callable [[TaskiqState ], Awaitable [None ]]:
13
13
"""
14
14
Generate shutdown event.
@@ -24,12 +24,16 @@ def startup_event_generator(
24
24
async def startup (state : TaskiqState ) -> None :
25
25
if not broker .is_worker_process :
26
26
return
27
- app = import_object (app_path )
27
+ if isinstance (app_or_path , str ):
28
+ app = import_object (app_or_path )
29
+ else :
30
+ app = app_or_path
31
+
28
32
if not isinstance (app , FastAPI ):
29
33
app = app ()
30
34
31
35
if not isinstance (app , FastAPI ):
32
- raise ValueError (f"'{ app_path } ' is not a FastAPI application." )
36
+ raise ValueError (f"'{ app_or_path } ' is not a FastAPI application." )
33
37
34
38
state .fastapi_app = app
35
39
await app .router .startup ()
@@ -62,7 +66,7 @@ async def shutdown(state: TaskiqState) -> None:
62
66
return shutdown
63
67
64
68
65
- def init (broker : AsyncBroker , app_path : str ) -> None :
69
+ def init (broker : AsyncBroker , app_or_path : Union [ str , FastAPI ] ) -> None :
66
70
"""
67
71
Add taskiq startup events.
68
72
@@ -78,7 +82,7 @@ def init(broker: AsyncBroker, app_path: str) -> None:
78
82
"""
79
83
broker .add_event_handler (
80
84
TaskiqEvents .WORKER_STARTUP ,
81
- startup_event_generator (broker , app_path ),
85
+ startup_event_generator (broker , app_or_path ),
82
86
)
83
87
84
88
broker .add_event_handler (
0 commit comments