From 1dcc2610b243ffb76a17f2fb7fd6d716d4ff5699 Mon Sep 17 00:00:00 2001 From: Stuart Reed Date: Mon, 19 Jun 2023 15:38:30 -0600 Subject: [PATCH] Skip formatting response when None --- .../middleware/test_formatting_middleware.py | 19 ++++++++++++++++++- web3/middleware/formatting.py | 6 +++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/tests/core/middleware/test_formatting_middleware.py b/tests/core/middleware/test_formatting_middleware.py index a277339577..8f7f9ca807 100644 --- a/tests/core/middleware/test_formatting_middleware.py +++ b/tests/core/middleware/test_formatting_middleware.py @@ -91,6 +91,23 @@ def test_formatting_middleware_result_formatters(w3): assert actual == expected +def test_formatting_middleware_result_formatters_for_none(w3): + w3.middleware_onion.add( + construct_result_generator_middleware( + {RPCEndpoint("test_endpoint"): lambda method, params: None} + ) + ) + w3.middleware_onion.add( + construct_formatting_middleware( + result_formatters={RPCEndpoint("test_endpoint"): lambda x: hex(x)} + ) + ) + + expected = None + actual = w3.manager.request_blocking("test_endpoint", []) + assert actual == expected + + def test_formatting_middleware_error_formatters(w3): w3.middleware_onion.add( construct_error_generator_middleware( @@ -106,4 +123,4 @@ def test_formatting_middleware_error_formatters(w3): expected = "error" with pytest.raises(ValueError) as err: w3.manager.request_blocking("test_endpoint", []) - assert str(err.value) == expected \ No newline at end of file + assert str(err.value) == expected diff --git a/web3/middleware/formatting.py b/web3/middleware/formatting.py index d6637085d8..c036877850 100644 --- a/web3/middleware/formatting.py +++ b/web3/middleware/formatting.py @@ -50,7 +50,11 @@ def _format_response( response, response_type, method_response_formatter(appropriate_response) ) - if "result" in response and method in result_formatters: + if ( + "result" in response + and response["result"] is not None + and method in result_formatters + ): return _format_response("result", result_formatters[method]) elif "error" in response and method in error_formatters: return _format_response("error", error_formatters[method])