From be08aca6596cea8801b15d80f8c6f1b30058269a Mon Sep 17 00:00:00 2001 From: Aviksaikat Date: Wed, 7 Aug 2024 14:04:24 +0530 Subject: [PATCH] feat: get_new_uri method added to get new URI with backwards compatibility --- ape_infura/provider.py | 13 +++++++++++++ tests/test_provider.py | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/ape_infura/provider.py b/ape_infura/provider.py index 45183e9..b502b7f 100644 --- a/ape_infura/provider.py +++ b/ape_infura/provider.py @@ -67,6 +67,19 @@ def uri(self) -> str: self.network_uris[(ecosystem_name, network_name)] = network_uri return network_uri + def get_new_uri(self) -> str: + """ + To generate a new URI with a new API key. Added to keep backwards compatibity + """ + key = self.get_random_api_key() + ecosystem_name = self.network.ecosystem.name + network_name = self.network.name + + prefix = f"{ecosystem_name}-" if ecosystem_name != "ethereum" else "" + network_uri = f"https://{prefix}{network_name}.infura.io/v3/{key}" + self.network_uris[(ecosystem_name, network_name)] = network_uri + return network_uri + @property def http_uri(self) -> str: # NOTE: Overriding `Web3Provider.http_uri` implementation diff --git a/tests/test_provider.py b/tests/test_provider.py index 9fdb39a..6d67ffd 100644 --- a/tests/test_provider.py +++ b/tests/test_provider.py @@ -70,6 +70,18 @@ def test_random_api_key_selection(provider, mocker): assert len(selected_keys) > 1 # Ensure we're getting different keys +def test_uri_with_random_api_key(provider, mocker): + # mocker.patch.dict(os.environ, {"WEB3_INFURA_PROJECT_ID": "key1, key2, key3, key4, key5, key6"}) + provider.load_api_keys() + uris = set() + for _ in range(100): # Generate multiple URIs + uri = provider.get_new_uri() # Use get_new_uri method to get a URI + uris.add(uri) + assert uri.startswith("https") + assert "/v3" in uri + assert len(uris) > 1 # Ensure we're getting different URIs with different + + def test_missing_project_key_error_raised(provider, mocker): mocker.patch.dict(os.environ, {}, clear=True) with pytest.raises(MissingProjectKeyError):