@@ -985,6 +985,12 @@ async def retrieve(self, item_id: str) -> Optional[dict]:
985985 return subscription
986986 except asyncio .QueueEmpty :
987987 pass
988+ except KeyError :
989+ logger .debug (
990+ f"Received item { item_id } not in received subscriptions. "
991+ f"This indicates the response of the subscription was inflight when sending "
992+ f"the unsubscribe request."
993+ )
988994 if self ._send_recv_task is not None and self ._send_recv_task .done ():
989995 if not self ._send_recv_task .cancelled ():
990996 if isinstance ((e := self ._send_recv_task .exception ()), Exception ):
@@ -1071,7 +1077,7 @@ def __init__(
10711077 "strict_scale_decode" : True ,
10721078 }
10731079 self .initialized = False
1074- self ._forgettable_task = None
1080+ self ._forgettable_tasks = set ()
10751081 self .type_registry = type_registry
10761082 self .type_registry_preset = type_registry_preset
10771083 self .runtime_cache = RuntimeCache ()
@@ -1531,11 +1537,13 @@ async def result_handler(
15311537
15321538 if subscription_result is not None :
15331539 # Handler returned end result: unsubscribe from further updates
1534- self . _forgettable_task = asyncio .create_task (
1540+ unsub_task = asyncio .create_task (
15351541 self .rpc_request (
15361542 "state_unsubscribeStorage" , [subscription_id ]
15371543 )
15381544 )
1545+ self ._forgettable_tasks .add (unsub_task )
1546+ unsub_task .add_done_callback (self ._forgettable_tasks .discard )
15391547
15401548 return result_found , subscription_result
15411549
@@ -1560,7 +1568,9 @@ async def retrieve_pending_extrinsics(self) -> list:
15601568
15611569 result_data = await self .rpc_request ("author_pendingExtrinsics" , [])
15621570 if "error" in result_data :
1563- logger .error (f"Error in retrieving pending extrinsics: { result_data ['error' ]} " )
1571+ logger .error (
1572+ f"Error in retrieving pending extrinsics: { result_data ['error' ]} "
1573+ )
15641574 raise SubstrateRequestException (result_data ["error" ]["message" ])
15651575 extrinsics = []
15661576
0 commit comments