44from itertools import zip_longest
55from typing import Any , Callable , Dict , List , Optional , Tuple
66
7- from fastapi import FastAPI
87from gmqtt import Client as MQTTClient
98from gmqtt import Message , Subscription
109from gmqtt .mqtt .constants import MQTTv50
1110
1211from .config import MQTTConfig
13- from .handlers import MQTTHandlers
12+ from .handlers import (
13+ MQTTConnectionHandler ,
14+ MQTTDisconnectHandler ,
15+ MQTTHandlers ,
16+ MQTTMessageHandler ,
17+ MQTTSubscriptionHandler ,
18+ )
1419
1520try :
1621 from uvicorn .config import logger as log_info
@@ -67,7 +72,7 @@ def __init__(
6772 self .client ._connect_properties = kwargs
6873 self .client .on_message = self .__on_message
6974 self .client .on_connect = self .__on_connect
70- self .subscriptions : Dict [str , Tuple [Subscription , List [Callable ]]] = {}
75+ self .subscriptions : Dict [str , Tuple [Subscription , List [MQTTMessageHandler ]]] = {}
7176 self ._logger = mqtt_logger or log_info
7277 self .mqtt_handlers = MQTTHandlers (self .client , self ._logger )
7378
@@ -225,14 +230,14 @@ async def mqtt_shutdown(self) -> None:
225230 """Final disconnection for MQTT client, for lifespan shutdown."""
226231 await self .client .disconnect ()
227232
228- def init_app (self , app : FastAPI ) -> None : # pragma: no cover
233+ def init_app (self , fastapi_app ) -> None : # pragma: no cover
229234 """Add startup and shutdown event handlers for app without lifespan."""
230235
231- @app .on_event ("startup" )
236+ @fastapi_app .on_event ("startup" )
232237 async def startup () -> None :
233238 await self .mqtt_startup ()
234239
235- @app .on_event ("shutdown" )
240+ @fastapi_app .on_event ("shutdown" )
236241 async def shutdown () -> None :
237242 await self .mqtt_shutdown ()
238243
@@ -249,7 +254,7 @@ def subscribe(
249254 Decorator method used to subscribe for specific topics.
250255 """
251256
252- def subscribe_handler (handler : Callable ) -> Callable :
257+ def subscribe_handler (handler : MQTTMessageHandler ) -> MQTTMessageHandler :
253258 self ._logger .debug ("Subscribe for topics: %s" , topics )
254259 for topic in topics :
255260 if topic not in self .subscriptions :
@@ -290,7 +295,7 @@ def on_connect(self) -> Callable[..., Any]:
290295 Decorator method used to handle the connection to MQTT.
291296 """
292297
293- def connect_handler (handler : Callable ) -> Callable :
298+ def connect_handler (handler : MQTTConnectionHandler ) -> MQTTConnectionHandler :
294299 self ._logger .debug ("handler accepted" )
295300 return self .mqtt_handlers .on_connect (handler )
296301
@@ -301,7 +306,7 @@ def on_message(self) -> Callable[..., Any]:
301306 The decorator method is used to subscribe to messages from all topics.
302307 """
303308
304- def message_handler (handler : Callable ) -> Callable :
309+ def message_handler (handler : MQTTMessageHandler ) -> MQTTMessageHandler :
305310 self ._logger .debug ("on_message handler accepted" )
306311 return self .mqtt_handlers .on_message (handler )
307312
@@ -312,7 +317,7 @@ def on_disconnect(self) -> Callable[..., Any]:
312317 The Decorator method used wrap disconnect callback.
313318 """
314319
315- def disconnect_handler (handler : Callable ) -> Callable :
320+ def disconnect_handler (handler : MQTTDisconnectHandler ) -> MQTTDisconnectHandler :
316321 self ._logger .debug ("on_disconnect handler accepted" )
317322 return self .mqtt_handlers .on_disconnect (handler )
318323
@@ -323,7 +328,7 @@ def on_subscribe(self) -> Callable[..., Any]:
323328 Decorator method is used to obtain subscribed topics and properties.
324329 """
325330
326- def subscribe_handler (handler : Callable ) :
331+ def subscribe_handler (handler : MQTTSubscriptionHandler ) -> MQTTSubscriptionHandler :
327332 self ._logger .debug ("on_subscribe handler accepted" )
328333 return self .mqtt_handlers .on_subscribe (handler )
329334
0 commit comments