Skip to content

Commit 73b6586

Browse files
committed
Handle all subscription update failures
1 parent 1c09484 commit 73b6586

File tree

2 files changed

+42
-8
lines changed

2 files changed

+42
-8
lines changed

async_substrate_interface/async_substrate.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3987,15 +3987,32 @@ async def result_handler(message: dict, subscription_id) -> tuple[dict, bool]:
39873987
message_result = {
39883988
k.lower(): v for k, v in message["params"]["result"].items()
39893989
}
3990+
# check for any subscription indicators of failure
3991+
failure_message = None
39903992
if "usurped" in message_result:
3991-
logger.error(
3993+
failure_message = (
39923994
f"Subscription {subscription_id} usurped: {message_result}"
39933995
)
3996+
if "retracted" in message_result:
3997+
failure_message = (
3998+
f"Subscription {subscription_id} retracted: {message_result}"
3999+
)
4000+
if "finalitytimeout" in message_result:
4001+
failure_message = f"Subscription {subscription_id} finalityTimeout: {message_result}"
4002+
if "dropped" in message_result:
4003+
failure_message = (
4004+
f"Subscription {subscription_id} dropped: {message_result}"
4005+
)
4006+
if "invalid" in message_result:
4007+
failure_message = (
4008+
f"Subscription {subscription_id} invalid: {message_result}"
4009+
)
4010+
4011+
if failure_message is not None:
39944012
async with self.ws as ws:
39954013
await ws.unsubscribe(subscription_id)
3996-
raise SubstrateRequestException(
3997-
f"Subscription {subscription_id} usurped: {message_result}"
3998-
)
4014+
logger.error(failure_message)
4015+
raise SubstrateRequestException(failure_message)
39994016

40004017
if "finalized" in message_result and wait_for_finalization:
40014018
logger.debug("Extrinsic finalized. Unsubscribing.")

async_substrate_interface/sync_substrate.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3170,14 +3170,31 @@ def result_handler(message: dict, subscription_id) -> tuple[dict, bool]:
31703170
k.lower(): v for k, v in message["params"]["result"].items()
31713171
}
31723172

3173+
# check for any subscription indicators of failure
3174+
failure_message = None
31733175
if "usurped" in message_result:
3174-
logger.error(
3176+
failure_message = (
31753177
f"Subscription {subscription_id} usurped: {message_result}"
31763178
)
3177-
self.rpc_request("author_unwatchExtrinsic", [subscription_id])
3178-
raise SubstrateRequestException(
3179-
f"Subscription {subscription_id} usurped: {message_result}"
3179+
if "retracted" in message_result:
3180+
failure_message = (
3181+
f"Subscription {subscription_id} retracted: {message_result}"
3182+
)
3183+
if "finalitytimeout" in message_result:
3184+
failure_message = f"Subscription {subscription_id} finalityTimeout: {message_result}"
3185+
if "dropped" in message_result:
3186+
failure_message = (
3187+
f"Subscription {subscription_id} dropped: {message_result}"
31803188
)
3189+
if "invalid" in message_result:
3190+
failure_message = (
3191+
f"Subscription {subscription_id} invalid: {message_result}"
3192+
)
3193+
3194+
if failure_message is not None:
3195+
self.rpc_request("author_unwatchExtrinsic", [subscription_id])
3196+
logger.error(failure_message)
3197+
raise SubstrateRequestException(failure_message)
31813198

31823199
if "finalized" in message_result and wait_for_finalization:
31833200
# Created as a task because we don't actually care about the result

0 commit comments

Comments
 (0)