From b91c9b8edd2f539d73f1ba14fd839745127e02d3 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 13 Mar 2026 13:09:09 +0300 Subject: [PATCH 1/2] fix: consistent kv.get in py --- .../human_protocol_sdk/kvstore/kvstore_utils.py | 8 ++++---- .../test/human_protocol_sdk/kvstore/test_kvstore_utils.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/kvstore/kvstore_utils.py b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/kvstore/kvstore_utils.py index a1d4f63f9e..d27476c509 100644 --- a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/kvstore/kvstore_utils.py +++ b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/kvstore/kvstore_utils.py @@ -125,7 +125,7 @@ def get( address: str, key: str, options: Optional[SubgraphOptions] = None, - ) -> Optional[str]: + ) -> str: """Get the value of a specific key for an address. Queries the subgraph for a specific key-value pair associated with an address. @@ -181,7 +181,7 @@ def get( or "kvstores" not in kvstore_data["data"] or len(kvstore_data["data"]["kvstores"]) == 0 ): - return None + return "" return kvstore_data["data"]["kvstores"][0]["value"] @@ -232,12 +232,12 @@ def get_file_url_and_verify_hash( raise KVStoreClientError(f"Invalid address: {address}") url = KVStoreUtils.get(chain_id, address, key, options=options) - if url is None: + if url == "": raise KVStoreClientError("No URL found for the given address and key") hash = KVStoreUtils.get(chain_id, address, key + "_hash", options=options) - if hash is None: + if hash == "": raise KVStoreClientError("No hash found for the given address and url") content = requests.get(url).text diff --git a/packages/sdk/python/human-protocol-sdk/test/human_protocol_sdk/kvstore/test_kvstore_utils.py b/packages/sdk/python/human-protocol-sdk/test/human_protocol_sdk/kvstore/test_kvstore_utils.py index 689150a360..f4fa1709cc 100644 --- a/packages/sdk/python/human-protocol-sdk/test/human_protocol_sdk/kvstore/test_kvstore_utils.py +++ b/packages/sdk/python/human-protocol-sdk/test/human_protocol_sdk/kvstore/test_kvstore_utils.py @@ -149,7 +149,7 @@ def test_get_empty_value(self, mock_function): result = KVStoreUtils.get(ChainId.LOCALHOST, address, key) - self.assertIsNone(result) + self.assertEqual(result, "") mock_function.assert_called_once_with( NETWORKS[ChainId.LOCALHOST], From 6b6aad6a763dad2b3aceb54bf62fea1249aa5448 Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 13 Mar 2026 13:10:52 +0300 Subject: [PATCH 2/2] chore: add changeset --- .changeset/cozy-poets-go.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/cozy-poets-go.md diff --git a/.changeset/cozy-poets-go.md b/.changeset/cozy-poets-go.md new file mode 100644 index 0000000000..7728c99e1f --- /dev/null +++ b/.changeset/cozy-poets-go.md @@ -0,0 +1,6 @@ +--- +"@human-protocol/sdk": major +"@human-protocol/python-sdk": major +--- + +Updated KV Store utils in sdk to return empty string in case no value in subgraph instead of throwing and error