Feature/async auto provider #3788
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
AsyncAutoProviderfor automatic detection of asynchronous providers.load_async_provider_from_environmentandload_async_provider_from_urifunctions.Web3ValidationErrorfor WebSocket URIs in sync context.What was wrong?
Related to Issue #3704
The
AutoProviderlacked async support, which led to a "coroutine" bug whenWebSocketProvider(which is async-only) was picked up by the default synchronousAutoProvider. This resulted in an obscureAttributeError: 'coroutine' object has no attribute 'get'when the manager attempted to process the connection check.Additionally, there was no equivalent automatic provider detection for
AsyncWeb3users, making it harder to configure async instances via environment variables.How was it fixed?
AsyncAutoProviderImplementation:AsyncAutoProviderclass that inherits fromAsyncJSONBaseProvider.Environment Loading:
load_async_provider_from_environmentandload_async_provider_from_uri.WEB3_PROVIDER_URIandWEB3_WS_PROVIDER_URIfor async contexts.Validation & Error Handling:
AutoProvider(sync) to explicitly check if a discovered provider is async. If so, it raises aWeb3ValidationErrorwith instructions to useAsyncAutoProvider.load_provider_from_urito raiseWeb3ValidationErrorimmediately if aws://orwss://URI is passed to the synchronous loader.Documentation & Tests:
docs/providers.rstto includeAsyncAutoProviderusage examples.Todo: