@@ -19,19 +19,13 @@ def __init__(self, config: "TimersSubscriberConfig") -> None:
1919
2020 async def parse_message (self , msg : "TimerMessage" ) -> TimerStreamMessage :
2121 timer_id = msg ["timer_id" ]
22- outer_config = self ._config ._outer_config # noqa: SLF001
23- store = outer_config . store
22+ store = self ._config ._outer_config . store # noqa: SLF001
23+ discard_corrupt = None
2424 try :
2525 body , headers = TimerMessageFormat .parse (msg ["data" ])
2626 except ValueError as e :
27- await store .remove (self ._config .full_topic , timer_id )
28- outer_config .logger .log (
29- f"Timer { timer_id !r} on { self ._config .full_topic !r} removed: "
30- f"its { len (msg ['data' ])} -byte payload cannot be parsed" ,
31- logging .ERROR ,
32- exc_info = e ,
33- )
34- raise
27+ body , headers = msg ["data" ], {}
28+ discard_corrupt = partial (self ._discard_corrupt , msg , e )
3529 return TimerStreamMessage (
3630 raw_message = msg ,
3731 body = body ,
@@ -41,7 +35,19 @@ async def parse_message(self, msg: "TimerMessage") -> TimerStreamMessage:
4135 correlation_id = headers .get ("correlation_id" , timer_id ),
4236 reply_to = headers .get ("reply_to" , "" ),
4337 _remove = partial (store .remove , self ._config .full_topic , timer_id ),
38+ _discard_corrupt = discard_corrupt ,
39+ )
40+
41+ async def _discard_corrupt (self , msg : "TimerMessage" , error : ValueError ) -> typing .NoReturn :
42+ outer_config = self ._config ._outer_config # noqa: SLF001
43+ await outer_config .store .remove (self ._config .full_topic , msg ["timer_id" ])
44+ outer_config .logger .log (
45+ f"Timer { msg ['timer_id' ]!r} on { self ._config .full_topic !r} removed: "
46+ f"its { len (msg ['data' ])} -byte payload cannot be parsed" ,
47+ logging .ERROR ,
48+ exc_info = error ,
4449 )
50+ raise error
4551
4652 async def decode_message (self , msg : TimerStreamMessage ) -> typing .Any :
4753 return decode_message (msg )
0 commit comments