App Configuration Provider Cleanup#47801
Conversation
Mostly docstring fixes and a couple bug fixes.
There was a problem hiding this comment.
Pull request overview
This PR cleans up the Azure App Configuration Provider implementation by improving docstrings/type hints, removing unused/dead code, and refining replica discovery/refresh behavior (including closing no-longer-used replica clients and distinguishing DNS timeout vs empty replica results).
Changes:
- Improve/normalize docstrings and type hints across sync/async provider, client managers, and Key Vault secret providers.
- Refine replica discovery/refresh logic: distinguish SRV lookup timeout vs empty replica list, and close replica clients removed from the failover set.
- Clean up constants/imports and minor behavioral fixes (e.g.,
raisevsraise e, whitespace handling).
Reviewed changes
Copilot reviewed 27 out of 27 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| sdk/appconfiguration/azure-appconfiguration-provider/tests/test_utils.py | Updates assertion to match new attempts validation message. |
| sdk/appconfiguration/azure-appconfiguration-provider/tests/test_request_tracing_context.py | Updates tests to use renamed env-var constants. |
| sdk/appconfiguration/azure-appconfiguration-provider/tests/test_configuration_client_manager.py | Adds close() to test stub client to support new close calls. |
| sdk/appconfiguration/azure-appconfiguration-provider/tests/test_configuration_client_manager_load_balance.py | Adds close() to test stub client to support new close calls. |
| sdk/appconfiguration/azure-appconfiguration-provider/tests/aio/test_configuration_async_client_manager.py | Adds async close() to async test stub client. |
| sdk/appconfiguration/azure-appconfiguration-provider/tests/aio/test_configuration_async_client_manager_load_balance.py | Adds async close() to async test stub client. |
| sdk/appconfiguration/azure-appconfiguration-provider/CHANGELOG.md | Documents replica-client leak fix and timeout-vs-empty discovery behavior. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/aio/_key_vault/_async_secret_provider.py | Removes unused JSON alias/import; fixes close docstring wording. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/aio/_azureappconfigurationproviderasync.py | Adds docstring for _attempt_refresh and removes unused JSON alias. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/aio/_async_load.py | Fixes docstring keyword typing text and removes duplicated docs. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/aio/_async_discovery.py | Raises TimeoutError on SRV timeout to distinguish from empty results. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/aio/_async_client_manager.py | Improves type hints/docstrings; catches timeout via exception; closes removed replicas. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_utils.py | Doc/type cleanup and backoff calc simplification; adjusts validation/error text. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_snapshot_reference_parser.py | Improves docstring and normalizes whitespace handling. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_request_tracing_context.py | Renames imported env-var constants; removes dead constants; minor loop var cleanup. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_refresh_timer.py | Simplifies backoff cap logic (removes redundant overflow check). |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_models.py | Tightens docstring typing for Key Vault options and selectors. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_load.py | Moves JSON alias local; fixes docstring keyword typing text and removes duplicated docs. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_key_vault/_secret_provider.py | Removes unused JSON alias/import; fixes close docstring wording. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_key_vault/_secret_provider_base.py | Removes unused typing aliases; clarifies validation message. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_json.py | Clarifies docstring wording for comment-stripping helper. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_discovery.py | Raises TimeoutError on SRV timeout to distinguish from empty results. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_constants.py | Renames env-var constants to uppercase; minor comment formatting. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_client_manager.py | Improves type hints/docstrings; catches timeout via exception; closes removed replicas. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_client_manager_base.py | Removes unused typing aliases; renames load-balancing param; simplifies backoff cap. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationproviderbase.py | Refines watched-setting parsing and adds locks on additional read operations. |
| sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationprovider.py | Makes connection_string kw pop default-safe and adds docstring for _attempt_refresh. |
| :param str etag: etag to check for changes | ||
| :param Mapping[str, str] headers: headers to use for the request | ||
| :param Optional[str] etag: etag to check for changes | ||
| :param Dict[str, str] headers: headers to use for the request |
There was a problem hiding this comment.
Should we keep the Mapping interface instead of a concrete Dict here?
| startup_timeout = kwargs.pop("startup_timeout", DEFAULT_STARTUP_TIMEOUT) | ||
| if startup_timeout < 0: | ||
| raise ValueError("Startup timeout must be greater than or equal to 0 seconds.") | ||
| raise ValueError("Startup timeout must be at least 1 second.") |
There was a problem hiding this comment.
Shouldn't this be at least 0 instead of 1?
There was a problem hiding this comment.
I'm thinking this is from a version of this before I split things up to bug fixes and doc updates. I'll revert.
| attempts += 1 | ||
| if attempts < 1: | ||
| raise ValueError("Number of attempts must be at least 1.") | ||
| raise ValueError("Number of attempts must be at least 0.") |
There was a problem hiding this comment.
Any reason we change this number to 0? attempts < 1 naturally checks if the value is supposed to be at least 1?
There was a problem hiding this comment.
The user provides attempts but we add 1 to it before doing this check. So, they as a user need at least 0 to be provided.
Description
Mostly Updates missing/wrong doc strings and type hints.
But also:
JOSNtype in multiple locations.raiseinstead ofraise eAll SDK Contribution checklist:
General Guidelines and Best Practices
Testing Guidelines