@@ -315,6 +315,11 @@ class SendedRequestEntry(NamedTuple):
315315 result_type : Optional [Type [Any ]]
316316
317317
318+ class ReceivedRequestEntry (NamedTuple ):
319+ future : asyncio .Future [Any ]
320+ request : Optional [Any ]
321+
322+
318323class JsonRPCProtocolBase (asyncio .Protocol , ABC ):
319324
320325 _logger = LoggingDescriptor ()
@@ -405,7 +410,7 @@ def __init__(self) -> None:
405410 self ._sended_request : OrderedDict [Union [str , int ], SendedRequestEntry ] = OrderedDict ()
406411 self ._sended_request_count = 0
407412 self ._received_request_lock = threading .RLock ()
408- self ._received_request : OrderedDict [Union [str , int , None ], asyncio . Future [ Any ] ] = OrderedDict ()
413+ self ._received_request : OrderedDict [Union [str , int , None ], ReceivedRequestEntry ] = OrderedDict ()
409414
410415 @staticmethod
411416 def _generate_json_rpc_messages_from_dict (
@@ -641,7 +646,7 @@ async def handle_request(self, message: JsonRPCRequest) -> None:
641646 result = asyncio .create_task (ensure_coroutine (e .method )(* params [0 ], ** params [1 ]))
642647
643648 with self ._received_request_lock :
644- self ._received_request [message .id ] = result
649+ self ._received_request [message .id ] = ReceivedRequestEntry ( result , message )
645650
646651 try :
647652 self .send_response (message .id , await result )
@@ -660,16 +665,17 @@ async def handle_request(self, message: JsonRPCRequest) -> None:
660665 self ._logger .exception (e )
661666 self .send_error (JsonRPCErrors .INTERNAL_ERROR , f"{ type (e ).__name__ } : { e } " , id = message .id )
662667
663- async def cancel_received_request (self , id : Union [int , str , None ]) -> None :
668+ async def cancel_request (self , id : Union [int , str , None ]) -> None :
664669 with self ._received_request_lock :
665- future = self ._received_request .get (id , None )
666- if future is not None and not future .cancelled ():
667- future .cancel ()
670+ entry = self ._received_request .get (id , None )
671+ if entry is not None and entry .future is not None and not entry .future .cancelled ():
672+ self ._logger .debug (f"try to cancel request { entry .request } " )
673+ entry .future .cancel ()
668674
669675 async def cancel_all_received_request (self ) -> None :
670- for future in self ._received_request .values ():
671- if future is not None and not future .cancelled ():
672- future .cancel ()
676+ for entry in self ._received_request .values ():
677+ if entry is not None and entry . future is not None and not entry . future .cancelled ():
678+ entry . future .cancel ()
673679
674680 async def handle_notification (self , message : JsonRPCNotification ) -> None :
675681 e = self .registry .get_entry (message .method )
0 commit comments