From ddb88a58bfd8a14d7ce009675de3502d00da8667 Mon Sep 17 00:00:00 2001 From: Fred Thomsen Date: Sat, 23 Jul 2016 11:39:15 -0400 Subject: [PATCH 1/3] Add bitswap command Conflicts: ipfsApi/client.py --- ipfsApi/client.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/ipfsApi/client.py b/ipfsApi/client.py index b8a2e3a1..70e4747b 100644 --- a/ipfsApi/client.py +++ b/ipfsApi/client.py @@ -28,6 +28,9 @@ class Client(object): block_stat -- returns a dict with the size of the block with the given hash block_get -- returns the raw contents of a block block_put -- stores input as an IPFS block + bitswap_wantlist -- show blocks currently on the wantlist + bitswap_stat -- show some diagnostic information on the bitswap agent + bitswap_unwant -- remove a given block from wantlist object_data -- returns the raw bytes in an IPFS object object_new -- creates a new object from an ipfs template object_links -- returns the links pointed to by the specified object @@ -121,6 +124,10 @@ def __init__(self, host=None, port=None, self._block_get = ArgCommand('/block/get') self._block_put = FileCommand('/block/put') self._object_new = ArgCommand('/object/new') + self._bitswap_wantlist = ArgCommand('/bitswap/wantlist') + self._bitswap_stat = Command('/bitswap/stat') + self._bitswap_unwant = ArgCommand('/bitswap/unwant') + self._object_data = ArgCommand('/object/data') self._object_links = ArgCommand('/object/links') self._object_get = ArgCommand('/object/get') @@ -318,6 +325,30 @@ def block_put(self, file, **kwargs): """ return self._block_put.request(self._client, (), file, **kwargs) + def bitswap_wantlist(self, peer=None, **kwargs): + """ + Show blocks currently on the wantlist. + + :param peer: Peer to show wantlist for. + """ + return self._bitswap_wantlist.request(self._client, peer, **kwargs) + + def bitswap_stat(self, **kwargs): + """ + Show some diagnostic information on the bitswap agent. + """ + + return self._bitswap_stat.request(self._client, **kwargs) + + def bitswap_unwant(self, key, **kwargs): + """ + Remove a given block from wantlist. + + :param key: Key to remove from wantlist. + """ + + return self._bitswap_unwant.request(self._client, key, **kwargs) + def object_data(self, multihash, **kwargs): r"""Returns the raw bytes in an IPFS object. From cad16cf582ff47cdfcaac942661921e19dfadbea Mon Sep 17 00:00:00 2001 From: Fred Thomsen Date: Tue, 16 Aug 2016 20:57:42 -0400 Subject: [PATCH 2/3] Add associated bitswap command functional tests --- test/functional/tests.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/functional/tests.py b/test/functional/tests.py index a82997be..e719a58f 100644 --- a/test/functional/tests.py +++ b/test/functional/tests.py @@ -492,5 +492,28 @@ def test_object_patch_set_data(self): self.assertEqual(result, {'Hash': 'QmV4QR7MCBj5VTi6ddHmXPyjWGzbaKEtX2mx7axA5PA13G'}) + +class IpfsApiBitswapTest(unittest.TestCase): + + def setUp(self): + self.api = ipfsApi.Client() + + def test_bitswap_wantlist(self): + result = self.api.bitswap_wantlist(peer='QmdkJZUWnVkEc6yfptVu4LWY8nHkEnGwsxqQ233QSGj8UP') + self.assertTrue(result and type(result) is dict and 'Keys' in result) + + def test_bitswap_stat(self): + result = self.api.bitswap_stat() + self.assertTrue(result and type(result) is dict and 'Wantlist' in result) + + def test_bitswap_unwant(self): + """ + Cannot ensure what is present in the wantlist prior to execution, so just ensure + something comes back. + """ + + result = self.api.bitswap_unwant(key='QmZTR5bcpQD7cFgTorqxZDYaew1Wqgfbd2ud9QqGPAkK2V') + self.assertTrue(result is not None) + if __name__ == "__main__": unittest.main() From 4860500c197339bfdb09e2e8a217a86a37e3c985 Mon Sep 17 00:00:00 2001 From: Fred Thomsen Date: Wed, 17 Aug 2016 23:07:45 -0400 Subject: [PATCH 3/3] Add decorator to bitswap tests to skip if ipfs daemon is offline --- test/functional/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/tests.py b/test/functional/tests.py index e719a58f..0a7fb2e8 100644 --- a/test/functional/tests.py +++ b/test/functional/tests.py @@ -492,7 +492,7 @@ def test_object_patch_set_data(self): self.assertEqual(result, {'Hash': 'QmV4QR7MCBj5VTi6ddHmXPyjWGzbaKEtX2mx7axA5PA13G'}) - +@skipIfOffline() class IpfsApiBitswapTest(unittest.TestCase): def setUp(self):