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`` 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) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index e31642dbda..092282a520 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -499,8 +499,12 @@ def get_request_formatters( method_name: Union[RPCEndpoint, Callable[..., RPCEndpoint]] ) -> Dict[str, Callable[..., Any]]: request_formatter_maps = ( - METHOD_NORMALIZERS, ABI_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) 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,