From f73d2eb6fbf36f60848d8b46cacf22823e7a51c6 Mon Sep 17 00:00:00 2001 From: Keri Date: Fri, 25 Sep 2020 09:50:10 -0600 Subject: [PATCH 1/4] eth_getFilterChanges, getFilterLogs, and getLogs use Method --- web3/_utils/method_formatters.py | 2 +- web3/eth.py | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index e31642dbda..67d4560f40 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -499,9 +499,9 @@ def get_request_formatters( method_name: Union[RPCEndpoint, Callable[..., RPCEndpoint]] ) -> Dict[str, Callable[..., Any]]: request_formatter_maps = ( - METHOD_NORMALIZERS, ABI_REQUEST_FORMATTERS, PYTHONIC_REQUEST_FORMATTERS, + METHOD_NORMALIZERS, ) formatters = combine_formatters(request_formatter_maps, method_name) return compose(*formatters) diff --git a/web3/eth.py b/web3/eth.py index dcbe3df6c6..7f3b0a3929 100644 --- a/web3/eth.py +++ b/web3/eth.py @@ -500,20 +500,20 @@ def filter( "a valid filter object, or a filter_id as a string " "or hex.") - def getFilterChanges(self, filter_id: HexStr) -> List[LogReceipt]: - return self.web3.manager.request_blocking( - RPC.eth_getFilterChanges, [filter_id], - ) - - def getFilterLogs(self, filter_id: HexStr) -> List[LogReceipt]: - return self.web3.manager.request_blocking( - RPC.eth_getFilterLogs, [filter_id], - ) - - def getLogs(self, filter_params: FilterParams) -> List[LogReceipt]: - return self.web3.manager.request_blocking( - RPC.eth_getLogs, [filter_params], - ) + getFilterChanges: Method[Callable[[HexStr], List[LogReceipt]]] = Method( + RPC.eth_getFilterChanges, + mungers=[default_root_munger] + ) + + getFilterLogs: Method[Callable[[HexStr], List[LogReceipt]]] = Method( + RPC.eth_getFilterLogs, + mungers=[default_root_munger] + ) + + getLogs: Method[Callable[[FilterParams], List[LogReceipt]]] = Method( + RPC.eth_getLogs, + mungers=[default_root_munger] + ) submitHashrate: Method[Callable[[int, _Hash32], bool]] = Method( RPC.eth_submitHashrate, From 1ac50d297680950046d861252f45bb24b638f623 Mon Sep 17 00:00:00 2001 From: Keri Date: Fri, 25 Sep 2020 12:44:49 -0600 Subject: [PATCH 2/4] Remove redundant param normalization test --- .../test_request_param_normalizer.py | 35 ------------------- 1 file changed, 35 deletions(-) delete mode 100644 tests/core/middleware/test_request_param_normalizer.py diff --git a/tests/core/middleware/test_request_param_normalizer.py b/tests/core/middleware/test_request_param_normalizer.py deleted file mode 100644 index 2b3f18e169..0000000000 --- a/tests/core/middleware/test_request_param_normalizer.py +++ /dev/null @@ -1,35 +0,0 @@ -import pytest - -from web3 import Web3 -from web3.middleware import ( # noqa: F401 - construct_result_generator_middleware, - request_parameter_normalizer, -) -from web3.providers.base import ( - BaseProvider, -) - - -@pytest.fixture -def w3_base(): - return Web3(provider=BaseProvider(), middlewares=[]) - - -@pytest.fixture -def result_generator_middleware(): - return construct_result_generator_middleware({ - 'eth_getLogs': lambda _, params: params, - }) - - -@pytest.fixture -def w3(w3_base, result_generator_middleware): - w3_base.middleware_onion.add(result_generator_middleware) - w3_base.middleware_onion.add(request_parameter_normalizer) - return w3_base - - -def test_eth_getLogs_param_normalization(w3): - result = w3.eth.getLogs({ - 'from': 'latest', 'address': '0x1111111111111111111111111111111111111111'}) - assert isinstance(result[0]['address'], list) From f8f72fb7adef595319401de0c41a00c8e2f0f4c7 Mon Sep 17 00:00:00 2001 From: Keri Date: Fri, 25 Sep 2020 13:50:57 -0600 Subject: [PATCH 3/4] Add newsfragment for getFilterChanges, getLogs, and getFilterLogs --- newsfragments/1752.misc.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 newsfragments/1752.misc.rst diff --git a/newsfragments/1752.misc.rst b/newsfragments/1752.misc.rst new file mode 100644 index 0000000000..52f4b137fd --- /dev/null +++ b/newsfragments/1752.misc.rst @@ -0,0 +1 @@ +Move eth_getFilterChanges, eth_getFilterLogs, and eth_getLogs to use ``Method`` From 08cbd32f30ddd11e0586dbd35d3a5febe4d9458c Mon Sep 17 00:00:00 2001 From: Keri Date: Mon, 12 Oct 2020 10:50:03 -0600 Subject: [PATCH 4/4] Add comment on order of request formatters --- web3/_utils/method_formatters.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index 67d4560f40..092282a520 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -500,8 +500,12 @@ def get_request_formatters( ) -> Dict[str, Callable[..., Any]]: request_formatter_maps = ( ABI_REQUEST_FORMATTERS, - PYTHONIC_REQUEST_FORMATTERS, + # METHOD_NORMALIZERS needs to be after ABI_REQUEST_FORMATTERS + # so that eth_getLogs's apply_formatter_at_index formatter + # is applied to the whole address + # rather than on the first byte of the address METHOD_NORMALIZERS, + PYTHONIC_REQUEST_FORMATTERS, ) formatters = combine_formatters(request_formatter_maps, method_name) return compose(*formatters)