diff --git a/README.md b/README.md index 449cf9acdc..de43e5a641 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ Read more in the [documentation on ReadTheDocs](http://web3py.readthedocs.io/). import json import web3 -from web3 import Web3, HTTPProvider, TestRPCProvider +from web3 import Web3 +from web3.providers.eth_tester import EthereumTesterProvider from solc import compile_source from web3.contract import ConciseContract @@ -46,7 +47,7 @@ compiled_sol = compile_source(contract_source_code) # Compiled source code contract_interface = compiled_sol[':Greeter'] # web3.py instance -w3 = Web3(TestRPCProvider()) +w3 = Web3(EthereumTesterProvider()) # Instantiate and deploy contract contract = w3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin']) diff --git a/docs/providers.rst b/docs/providers.rst index 9513fb4c6d..53c676c859 100644 --- a/docs/providers.rst +++ b/docs/providers.rst @@ -294,9 +294,7 @@ EthereumTesterProvider ~~~~~~~~~~~~~~~~~~~~~~ .. warning:: Experimental: This provider is experimental. There are still significant gaps in - functionality. However, it is the default replacement for - :class:`web3.providers.tester.EthereumTesterProvider` - and is being actively developed and supported. + functionality. However it is being actively developed and supported. .. py:class:: EthereumTesterProvider(eth_tester=None) @@ -312,38 +310,6 @@ EthereumTesterProvider >>> w3 = Web3(EthereumTesterProvider()) - -EthereumTesterProvider (legacy) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. warning:: Deprecated: This provider is deprecated in favor of - :class:`~web3.providers.eth_tester.EthereumTesterProvider` and the newly created eth-tester. - -.. py:class:: web3.providers.tester.EthereumTesterProvider() - - This provider can be used for testing. It uses an ephemeral blockchain - backed by the ``ethereum.tester`` module. - - .. code-block:: python - - >>> from web3 import Web3 - >>> from web3.providers.tester import EthereumTesterProvider - >>> w3 = Web3(EthereumTesterProvider()) - -TestRPCProvider -~~~~~~~~~~~~~~~ - -.. warning:: Deprecated: This provider is deprecated in favor of - :class:`~web3.providers.eth_tester.EthereumTesterProvider` and the newly created eth-tester. - -.. py:class:: TestRPCProvider() - - This provider can be used for testing. It uses an ephemeral blockchain - backed by the ``ethereum.tester`` module. This provider will be slower - than the ``EthereumTesterProvider`` since it uses an HTTP server for RPC - interactions with. - - AutoProvider ~~~~~~~~~~~~ diff --git a/web3/__init__.py b/web3/__init__.py index 5998dd2231..90c63b5692 100644 --- a/web3/__init__.py +++ b/web3/__init__.py @@ -21,9 +21,6 @@ from web3.providers.eth_tester import ( # noqa: E402 EthereumTesterProvider, ) -from web3.providers.tester import ( # noqa: E402 - TestRPCProvider, -) from web3.providers.ipc import ( # noqa: E402 IPCProvider, ) diff --git a/web3/main.py b/web3/main.py index 4bef042b75..fafb056c3f 100644 --- a/web3/main.py +++ b/web3/main.py @@ -67,9 +67,6 @@ from web3.providers.rpc import ( HTTPProvider, ) -from web3.providers.tester import ( - TestRPCProvider, -) from web3.providers.websocket import ( WebsocketProvider, ) @@ -102,7 +99,6 @@ class Web3: # Providers HTTPProvider = HTTPProvider IPCProvider = IPCProvider - TestRPCProvider = TestRPCProvider EthereumTesterProvider = EthereumTesterProvider WebsocketProvider = WebsocketProvider diff --git a/web3/providers/tester.py b/web3/providers/tester.py deleted file mode 100644 index e6d56546c2..0000000000 --- a/web3/providers/tester.py +++ /dev/null @@ -1,163 +0,0 @@ -from wsgiref.simple_server import ( - make_server, -) - -from eth_utils import ( - decode_hex, - is_integer, - is_string, - to_text, -) - -from web3._utils.decorators import ( - deprecated_for, -) -from web3._utils.formatters import ( - apply_formatter_at_index, - apply_formatter_if, - apply_formatters_to_dict, - hex_to_integer, - static_result, - static_return, -) -from web3._utils.threads import ( - spawn, -) -from web3._utils.toolz import ( - complement, - compose, - valmap, -) -from web3.middleware import ( - construct_exception_handler_middleware, - construct_formatting_middleware, -) - -from .base import ( - BaseProvider, -) -from .rpc import ( - HTTPProvider, -) - - -def is_testrpc_available(): - try: - import testrpc # noqa: F401 - return True - except ImportError: - return False - - -to_integer_if_hex = apply_formatter_if(is_string, hex_to_integer) - - -TRANSACTION_FORMATTERS = { - 'to': apply_formatter_if( - compose(complement(bool), decode_hex), - static_return(None), - ), -} - - -def ethtestrpc_string_middleware(make_request, web3): - def middleware(method, params): - return valmap(to_text, make_request(method, params)) - return middleware - - -ethtestrpc_middleware = construct_formatting_middleware( - request_formatters={ - 'eth_uninstallFilter': apply_formatter_at_index(to_integer_if_hex, 0), - 'eth_getFilterChanges': apply_formatter_at_index(to_integer_if_hex, 0), - 'eth_getFilterLogs': apply_formatter_at_index(to_integer_if_hex, 0), - }, - result_formatters={ - # Eth - 'eth_newFilter': apply_formatter_if(is_integer, hex), - 'eth_protocolVersion': apply_formatter_if(is_integer, str), - 'eth_getTransactionByHash': apply_formatters_to_dict(TRANSACTION_FORMATTERS), - # Net - 'net_version': apply_formatter_if(is_integer, str), - }, -) - - -return_none_result = static_result(None) - - -ethtestrpc_exception_middleware = construct_exception_handler_middleware( - method_handlers={ - 'eth_getBlockByHash': (ValueError, static_result(None)), - 'eth_getBlockByNumber': (ValueError, static_result(None)), - }, -) - - -def ethereum_tester_personal_remapper_middleware(make_request, web3): - def middleware(method, params): - if method == 'personal_sendTransaction': - return make_request('personal_signAndSendTransaction', params) - else: - return make_request(method, params) - return middleware - - -class EthereumTesterProvider(BaseProvider): - middlewares = [ - ethtestrpc_middleware, - ethtestrpc_string_middleware, - ethtestrpc_exception_middleware, - ethereum_tester_personal_remapper_middleware, - ] - - @deprecated_for("web3.providers.eth_tester.EthereumTesterProvider") - def __init__(self, - *args, - **kwargs): - if not is_testrpc_available(): - raise Exception("`TestRPCProvider` requires the `eth-testrpc` package to be installed") - from testrpc.rpc import RPCMethods - - self.rpc_methods = RPCMethods() - super(BaseProvider, self).__init__(*args, **kwargs) - - def __str__(self): - return "EthereumTesterProvider" - - def __repr__(self): - return self.__str__() - - def make_request(self, method, params): - rpc_fn = getattr(self.rpc_methods, method) - response = rpc_fn(*params) - - return { - 'result': response, - } - - def isConnected(self): - return True - - -class TestRPCProvider(HTTPProvider): - middlewares = [ethtestrpc_middleware, ethtestrpc_exception_middleware] - - @deprecated_for("web3.providers.eth_tester.EthereumTesterProvider") - def __init__(self, host="127.0.0.1", port=8545, *args, **kwargs): - if not is_testrpc_available(): - raise Exception("`TestRPCProvider` requires the `eth-testrpc` package to be installed") - from testrpc.server import get_application - - application = get_application() - - self.server = make_server( - host, - port, - application, - ) - - self.thread = spawn(self.server.serve_forever) - endpoint_uri = 'http://{0}:{1}'.format(host, port) - - super().__init__(endpoint_uri, *args, **kwargs)