From def91031b7801295eca26369fb830b85214a70b2 Mon Sep 17 00:00:00 2001 From: El De-dog-lo <3859395+fubuloubu@users.noreply.github.com> Date: Thu, 24 Aug 2023 10:45:58 -0500 Subject: [PATCH] feat(ProviderAPI): add uri str fields for easier use [APE-1317] (#1623) * feat: add `.http_url` and `.ws_url` * test: add tests to show default implementations work --- src/ape/api/providers.py | 40 +++++++++++++++++++++++++++++++ tests/functional/test_geth.py | 2 ++ tests/functional/test_provider.py | 5 ++++ 3 files changed, 47 insertions(+) diff --git a/src/ape/api/providers.py b/src/ape/api/providers.py index 4ccbf604b3..27a361a9a9 100644 --- a/src/ape/api/providers.py +++ b/src/ape/api/providers.py @@ -169,6 +169,20 @@ def disconnect(self): Disconnect from a provider, such as tear-down a process or quit an HTTP session. """ + @property + def http_uri(self) -> Optional[str]: + """ + Return the raw HTTP/HTTPS URI to connect to this provider, if supported. + """ + return None + + @property + def ws_uri(self) -> Optional[str]: + """ + Return the raw WS/WSS URI to connect to this provider, if supported. + """ + return None + @abstractmethod def update_settings(self, new_settings: dict): """ @@ -726,6 +740,32 @@ def web3(self) -> Web3: return self._web3 + @property + def http_uri(self) -> Optional[str]: + if ( + hasattr(self.web3.provider, "endpoint_uri") + and isinstance(self.web3.provider.endpoint_uri, str) + and self.web3.provider.endpoint_uri.startswith("http") + ): + return self.web3.provider.endpoint_uri + + elif hasattr(self, "uri"): + # NOTE: Some providers define this + return self.uri + + return None + + @property + def ws_uri(self) -> Optional[str]: + if ( + hasattr(self.web3.provider, "endpoint_uri") + and isinstance(self.web3.provider.endpoint_uri, str) + and self.web3.provider.endpoint_uri.startswith("ws") + ): + return self.web3.provider.endpoint_uri + + return None + @property def client_version(self) -> str: if not self._web3: diff --git a/tests/functional/test_geth.py b/tests/functional/test_geth.py index 047dde9328..fd01e28853 100644 --- a/tests/functional/test_geth.py +++ b/tests/functional/test_geth.py @@ -119,6 +119,8 @@ def geth_vyper_receipt(geth_vyper_contract, owner): @geth_process_test def test_uri(geth_provider): + assert geth_provider.http_uri == GETH_URI + assert not geth_provider.ws_uri assert geth_provider.uri == GETH_URI diff --git a/tests/functional/test_provider.py b/tests/functional/test_provider.py index 1bbe7bad0c..e6730860cf 100644 --- a/tests/functional/test_provider.py +++ b/tests/functional/test_provider.py @@ -11,6 +11,11 @@ from ape.utils import DEFAULT_TEST_CHAIN_ID +def test_uri(eth_tester_provider): + assert not eth_tester_provider.http_uri + assert not eth_tester_provider.ws_uri + + @pytest.mark.parametrize("block_id", (0, "0", "0x0", HexStr("0x0"))) def test_get_block(eth_tester_provider, block_id, vyper_contract_instance, owner): block = eth_tester_provider.get_block(block_id)