From d4440eac93628ee93afee63d4b39d73d088185bb Mon Sep 17 00:00:00 2001 From: BobTheBuidler Date: Sat, 17 May 2025 04:04:03 +0000 Subject: [PATCH 01/11] feat: optimize with iterators --- web3/_utils/method_formatters.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index d66852ed9d..658c63109d 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -7,6 +7,7 @@ Collection, Dict, Iterable, + Iterator, NoReturn, Tuple, TypeVar, @@ -35,7 +36,6 @@ is_string, to_checksum_address, to_list, - to_tuple, ) from eth_utils.toolz import ( complement, @@ -1094,11 +1094,10 @@ def subscription_formatter(value: Any) -> Union[HexBytes, HexStr, Dict[str, Any] } -@to_tuple def combine_formatters( formatter_maps: Collection[Dict[RPCEndpoint, Callable[..., TReturn]]], method_name: RPCEndpoint, -) -> Iterable[Callable[..., TReturn]]: +) -> Iterator[Callable[..., TReturn]]: for formatter_map in formatter_maps: if method_name in formatter_map: yield formatter_map[method_name] @@ -1234,12 +1233,11 @@ def filter_wrapper( } -@to_tuple def apply_module_to_formatters( formatters: Iterable[Callable[..., TReturn]], module: "Module", method_name: Union[RPCEndpoint, Callable[..., RPCEndpoint]], -) -> Iterable[Callable[..., TReturn]]: +) -> Iterator[Callable[..., TReturn]]: for f in formatters: yield partial(f, module, method_name) From fd3f03ed81714367f1355a2ccf190a373b0385b6 Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Tue, 20 May 2025 15:07:02 -0400 Subject: [PATCH 02/11] Update method_formatters.py --- web3/_utils/method_formatters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index 658c63109d..822c957ebd 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -1236,7 +1236,7 @@ def filter_wrapper( def apply_module_to_formatters( formatters: Iterable[Callable[..., TReturn]], module: "Module", - method_name: Union[RPCEndpoint, Callable[..., RPCEndpoint]], + method_name: RPCEndpoint, ) -> Iterator[Callable[..., TReturn]]: for f in formatters: yield partial(f, module, method_name) From b7a8f9436e1520b9541efc3a1bf2157e55582c95 Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Tue, 20 May 2025 15:11:14 -0400 Subject: [PATCH 03/11] Update method_formatters.py --- web3/_utils/method_formatters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index 822c957ebd..c1478c50fb 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -1234,10 +1234,10 @@ def filter_wrapper( def apply_module_to_formatters( - formatters: Iterable[Callable[..., TReturn]], + formatters: Iterable[Callable[["Module", RPCEndpoint, TValue], TReturn]], module: "Module", method_name: RPCEndpoint, -) -> Iterator[Callable[..., TReturn]]: +) -> Iterator[Callable[[TValue], TReturn]]: for f in formatters: yield partial(f, module, method_name) From c9294d100a65c3bdad3ad018c53f1d8054d5a3f9 Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Tue, 20 May 2025 15:14:53 -0400 Subject: [PATCH 04/11] Update method_formatters.py --- web3/_utils/method_formatters.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index c1478c50fb..8a44338004 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -119,6 +119,18 @@ from web3.module import Module # noqa: F401 TValue = TypeVar("TValue") +TReturn = TypeVar("TReturn") + +Filter = Union[ + AsyncBlockFilter, + AsyncTransactionFilter, + AsyncLogFilter, + BlockFilter, + TransactionFilter, + LogFilter, +] + +FilterResultFormatter = Callable[["Module", RPCEndpoint, TValue], TReturn] def bytes_to_ascii(value: bytes) -> str: @@ -1193,14 +1205,7 @@ def filter_wrapper( module: Union["AsyncEth", "Eth"], method: RPCEndpoint, filter_id: HexStr, -) -> Union[ - AsyncBlockFilter, - AsyncTransactionFilter, - AsyncLogFilter, - BlockFilter, - TransactionFilter, - LogFilter, -]: +) -> Filter: if method == RPC.eth_newBlockFilter: if module.is_async: return AsyncBlockFilter(filter_id, eth_module=cast("AsyncEth", module)) @@ -1226,7 +1231,7 @@ def filter_wrapper( ) -FILTER_RESULT_FORMATTERS: Dict[RPCEndpoint, Callable[..., Any]] = { +FILTER_RESULT_FORMATTERS: Dict[RPCEndpoint, FilterResultFormatter[HexStr, Filter]] = { RPC.eth_newPendingTransactionFilter: filter_wrapper, RPC.eth_newBlockFilter: filter_wrapper, RPC.eth_newFilter: filter_wrapper, @@ -1234,7 +1239,7 @@ def filter_wrapper( def apply_module_to_formatters( - formatters: Iterable[Callable[["Module", RPCEndpoint, TValue], TReturn]], + formatters: Iterable[FilterResultFormatter[TValue, TReturn]], module: "Module", method_name: RPCEndpoint, ) -> Iterator[Callable[[TValue], TReturn]]: From 09848ff8baf173a5053400ecb760319d19fefb72 Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Tue, 20 May 2025 15:28:09 -0400 Subject: [PATCH 05/11] Update method_formatters.py --- web3/_utils/method_formatters.py | 1 - 1 file changed, 1 deletion(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index 8a44338004..5deb96e2bc 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -119,7 +119,6 @@ from web3.module import Module # noqa: F401 TValue = TypeVar("TValue") -TReturn = TypeVar("TReturn") Filter = Union[ AsyncBlockFilter, From d5516049643475f451413fe064249c2595414f38 Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Tue, 20 May 2025 15:32:38 -0400 Subject: [PATCH 06/11] Update method_formatters.py --- web3/_utils/method_formatters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index 5deb96e2bc..832ade8d86 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -129,7 +129,7 @@ LogFilter, ] -FilterResultFormatter = Callable[["Module", RPCEndpoint, TValue], TReturn] +FilterResultFormatter = Callable[[Union["AsyncEth", "Eth"], RPCEndpoint, TValue], TReturn] def bytes_to_ascii(value: bytes) -> str: From 210fc8f92ed04f3a8e5a1b6d0fb7d4510ad179b6 Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Tue, 20 May 2025 15:34:17 -0400 Subject: [PATCH 07/11] Update method_formatters.py --- web3/_utils/method_formatters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index 832ade8d86..15277888d6 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -120,7 +120,7 @@ TValue = TypeVar("TValue") -Filter = Union[ +AnyFilter = Union[ AsyncBlockFilter, AsyncTransactionFilter, AsyncLogFilter, @@ -1204,7 +1204,7 @@ def filter_wrapper( module: Union["AsyncEth", "Eth"], method: RPCEndpoint, filter_id: HexStr, -) -> Filter: +) -> AnyFilter: if method == RPC.eth_newBlockFilter: if module.is_async: return AsyncBlockFilter(filter_id, eth_module=cast("AsyncEth", module)) From 2d7133795fb31442800e5b6e0b56941b73496002 Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Tue, 20 May 2025 15:38:08 -0400 Subject: [PATCH 08/11] Update method_formatters.py --- web3/_utils/method_formatters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index 15277888d6..0f540b1e43 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -1230,7 +1230,7 @@ def filter_wrapper( ) -FILTER_RESULT_FORMATTERS: Dict[RPCEndpoint, FilterResultFormatter[HexStr, Filter]] = { +FILTER_RESULT_FORMATTERS: Dict[RPCEndpoint, FilterResultFormatter[HexStr, AnyFilter]] = { RPC.eth_newPendingTransactionFilter: filter_wrapper, RPC.eth_newBlockFilter: filter_wrapper, RPC.eth_newFilter: filter_wrapper, From c8bef1b4d0f81c70dcafe8ddab313aaed63cfef5 Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Tue, 20 May 2025 15:39:29 -0400 Subject: [PATCH 09/11] Update method_formatters.py --- web3/_utils/method_formatters.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index 0f540b1e43..6ed151b63c 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -129,7 +129,9 @@ LogFilter, ] -FilterResultFormatter = Callable[[Union["AsyncEth", "Eth"], RPCEndpoint, TValue], TReturn] +TFilter = TypeVar("TFilter", bound=AnyFilter) + +FilterResultFormatter = Callable[[Union["AsyncEth", "Eth"], RPCEndpoint, TValue], TFilter] def bytes_to_ascii(value: bytes) -> str: @@ -1238,10 +1240,10 @@ def filter_wrapper( def apply_module_to_formatters( - formatters: Iterable[FilterResultFormatter[TValue, TReturn]], + formatters: Iterable[FilterResultFormatter[TValue, TFilter]], module: "Module", method_name: RPCEndpoint, -) -> Iterator[Callable[[TValue], TReturn]]: +) -> Iterator[Callable[[TValue], TFilter]]: for f in formatters: yield partial(f, module, method_name) From dccb68a13ef46f7e4d72b5cd11701008db96518a Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Tue, 20 May 2025 15:41:20 -0400 Subject: [PATCH 10/11] Update method_formatters.py --- web3/_utils/method_formatters.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index 6ed151b63c..51ea09dab7 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -129,7 +129,15 @@ LogFilter, ] -TFilter = TypeVar("TFilter", bound=AnyFilter) +TFilter = TypeVar( + "TFilter", + AsyncBlockFilter, + AsyncTransactionFilter, + AsyncLogFilter, + BlockFilter, + TransactionFilter, + LogFilter, +) FilterResultFormatter = Callable[[Union["AsyncEth", "Eth"], RPCEndpoint, TValue], TFilter] From 336c615a0f41af382a3c35c4d8fcf048a6d4122c Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Sat, 24 May 2025 14:02:03 -0400 Subject: [PATCH 11/11] chore: lint --- web3/_utils/method_formatters.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py index 51ea09dab7..eb7e70ddaa 100644 --- a/web3/_utils/method_formatters.py +++ b/web3/_utils/method_formatters.py @@ -139,7 +139,9 @@ LogFilter, ) -FilterResultFormatter = Callable[[Union["AsyncEth", "Eth"], RPCEndpoint, TValue], TFilter] +FilterResultFormatter = Callable[ + [Union["AsyncEth", "Eth"], RPCEndpoint, TValue], TFilter +] def bytes_to_ascii(value: bytes) -> str: @@ -1240,7 +1242,9 @@ def filter_wrapper( ) -FILTER_RESULT_FORMATTERS: Dict[RPCEndpoint, FilterResultFormatter[HexStr, AnyFilter]] = { +FILTER_RESULT_FORMATTERS: Dict[ + RPCEndpoint, FilterResultFormatter[HexStr, AnyFilter] +] = { RPC.eth_newPendingTransactionFilter: filter_wrapper, RPC.eth_newBlockFilter: filter_wrapper, RPC.eth_newFilter: filter_wrapper,