55import asyncio
66import json
77import logging
8+
89from typing import Any
910
11+
1012try :
1113 import redis .asyncio as aioredis # type: ignore
14+
1215 from redis .exceptions import RedisError # type: ignore
1316except ImportError : # pragma: no cover - optional dependency
1417 aioredis = None # type: ignore
1518 RedisError = Exception # type: ignore
1619
17- from a2a .server .events .event_queue import EventQueue
1820from typing import TYPE_CHECKING
21+
22+ from a2a .server .events .event_queue import EventQueue
23+
24+
1925if TYPE_CHECKING :
2026 from a2a .server .events .event_queue import Event
2127from pydantic import ValidationError
28+
2229from a2a .types import (
2330 Message ,
2431 Task ,
25- TaskStatusUpdateEvent ,
2632 TaskArtifactUpdateEvent ,
33+ TaskStatusUpdateEvent ,
2734)
2835from a2a .utils .telemetry import SpanKind , trace_class
2936
37+
3038logger = logging .getLogger (__name__ )
3139
3240
@@ -98,7 +106,7 @@ async def enqueue_event(self, event: Event) -> None:
98106 except RedisError :
99107 logger .exception ('Failed to XADD event to redis stream' )
100108
101- async def dequeue_event (self , no_wait : bool = False ) -> Event | Any :
109+ async def dequeue_event (self , no_wait : bool = False ) -> Event | Any : # noqa: PLR0912
102110 """Read one event from the Redis stream respecting no_wait semantics.
103111
104112 Returns a parsed pydantic model matching the event type.
@@ -128,18 +136,25 @@ async def dequeue_event(self, no_wait: bool = False) -> Event | Any:
128136 norm : dict [str , object ] = {}
129137 try :
130138 for k , v in fields .items ():
131- key = k .decode ('utf-8' ) if isinstance (k , (bytes , bytearray )) else k
132- if isinstance (v , (bytes , bytearray )):
139+ key = (
140+ k .decode ('utf-8' )
141+ if isinstance (k , bytes | bytearray )
142+ else k
143+ )
144+ if isinstance (v , bytes | bytearray ):
133145 try :
134146 val : object = v .decode ('utf-8' )
135- except Exception :
147+ except UnicodeDecodeError :
136148 val = v
137149 else :
138150 val = v
139151 norm [str (key )] = val
140- except Exception :
152+ except Exception : # noqa: BLE001
141153 # Defensive: if normalization fails, skip this entry and continue
142- logger .debug ('RedisEventQueue.dequeue_event: failed to normalize entry fields, skipping %s' , entry_id )
154+ logger .debug (
155+ 'RedisEventQueue.dequeue_event: failed to normalize entry fields, skipping %s' ,
156+ entry_id ,
157+ )
143158 continue
144159
145160 evt_type = norm .get ('type' )
@@ -153,7 +168,10 @@ async def dequeue_event(self, no_wait: bool = False) -> Event | Any:
153168 if raw_payload is None :
154169 # Missing payload — likely due to key mismatch or malformed entry.
155170 # Skip and continue to next entry instead of returning None to callers.
156- logger .debug ('RedisEventQueue.dequeue_event: skipping entry %s with missing payload' , entry_id )
171+ logger .debug (
172+ 'RedisEventQueue.dequeue_event: skipping entry %s with missing payload' ,
173+ entry_id ,
174+ )
157175 # continue loop to read next entry
158176 continue
159177
@@ -171,12 +189,17 @@ async def dequeue_event(self, no_wait: bool = False) -> Event | Any:
171189 try :
172190 return model .parse_obj (data )
173191 except ValidationError as exc :
174- logger .debug ('Failed to parse event payload into model, returning raw data: %s' , exc )
192+ logger .debug (
193+ 'Failed to parse event payload into model, returning raw data: %s' ,
194+ exc ,
195+ )
175196 # Return raw data for flexibility when parsing fails
176197 return data
177198
178199 # Unknown type — return raw data for flexibility
179- logger .debug ('Unknown event type: %s, returning raw payload' , evt_type )
200+ logger .debug (
201+ 'Unknown event type: %s, returning raw payload' , evt_type
202+ )
180203 return data
181204
182205 def task_done (self ) -> None : # streams do not require task_done semantics
@@ -226,4 +249,6 @@ async def clear_events(self, clear_child_queues: bool = True) -> None:
226249 try :
227250 await self ._redis .delete (self ._stream_key )
228251 except RedisError :
229- logger .exception ('Failed to delete redis stream during clear_events' )
252+ logger .exception (
253+ 'Failed to delete redis stream during clear_events'
254+ )
0 commit comments