@@ -31,6 +31,10 @@ def _NO_TM(m: "RmqMessage") -> Message:
3131 )
3232
3333
34+ async def _NEVER () -> bool :
35+ return False
36+
37+
3438APP_RMQ_CONNECTION_TIMEOUT_SECONDS = float (
3539 os .environ .get (
3640 "APP_RMQ_CONNECTION_TIMEOUT_SECONDS" ,
@@ -124,6 +128,7 @@ async def publish_to_exchange(
124128 confirmation_timeout : float = APP_RMQ_CONFIRMATION_TIMEOUT_SECONDS ,
125129 connection_timeout : float = APP_RMQ_CONNECTION_TIMEOUT_SECONDS ,
126130 channel : Optional [AbstractChannel ] = None ,
131+ is_peer_deactivated : Callable [[], Awaitable [bool ]] = _NEVER ,
127132) -> None :
128133 """Publishes messages to a RabbitMQ exchange.
129134
@@ -156,6 +161,7 @@ async def publish_messages(ch: AbstractChannel) -> None:
156161 exchange_name = exchange_name ,
157162 preprocess_message = preprocess_message ,
158163 confirmation_timeout = confirmation_timeout ,
164+ is_peer_deactivated = is_peer_deactivated ,
159165 )
160166
161167 try :
@@ -299,6 +305,7 @@ async def _publish_to_exchange(
299305 exchange_name : str ,
300306 preprocess_message : Callable [[Message ], Awaitable [RmqMessage ]],
301307 confirmation_timeout : float ,
308+ is_peer_deactivated : Callable [[], Awaitable [bool ]],
302309) -> None :
303310 exchange = await channel .get_exchange (exchange_name , ensure = False )
304311 deliveries : deque [_Delivery ] = deque ()
@@ -343,6 +350,9 @@ async def deliver_message(message: Message) -> None:
343350
344351 async def publish_messages () -> None :
345352 while message := await recv_queue .get ():
353+ if await is_peer_deactivated ():
354+ raise ServerError ("The peer has been deactivated." )
355+
346356 delivery = _Delivery (message .id )
347357 mark_as_confirmed = partial (on_confirmation , delivery )
348358
0 commit comments