diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/CHANGELOG.md b/sdk/appconfiguration/azure-appconfiguration-provider/CHANGELOG.md index 3007731bf9e6..20efe7144c9f 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/CHANGELOG.md +++ b/sdk/appconfiguration/azure-appconfiguration-provider/CHANGELOG.md @@ -3,15 +3,18 @@ ## 1.0.0b2 (Unreleased) ### Features Added - +* Added missing methods for Mapping API * Made load method properties unordered. ### Breaking Changes +* Changes how load works. Moves if from AzureAppConfigurationProvider.load to loadProvider. +* Removed custom Key Vault Error +* Removed unneeded __repr__ and copy methods. ### Bugs Fixed ### Other Changes - +* Updated method docs * Fixed load doc that used `selector` instead of `selects`. * Fixed CLI link in Readme. diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/__init__.py b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/__init__.py index a29ac854e457..463569a2ba35 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/__init__.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/__init__.py @@ -4,11 +4,11 @@ # license information. # ------------------------------------------------------------------------- -from ._azureappconfigurationprovider import AzureAppConfigurationProvider +from ._azureappconfigurationprovider import load_provider from ._azureappconfigurationkeyvaultoptions import AzureAppConfigurationKeyVaultOptions from ._settingselector import SettingSelector from ._version import VERSION __version__ = VERSION -__all__ = ["AzureAppConfigurationProvider", "AzureAppConfigurationKeyVaultOptions", "SettingSelector"] +__all__ = ["load_provider", "AzureAppConfigurationKeyVaultOptions", "SettingSelector"] diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azure_appconfiguration_provider_error.py b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azure_appconfiguration_provider_error.py deleted file mode 100644 index 3c7021cb71ba..000000000000 --- a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azure_appconfiguration_provider_error.py +++ /dev/null @@ -1,9 +0,0 @@ -# ------------------------------------------------------------------------ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# ------------------------------------------------------------------------- - - -class KeyVaultReferenceError(ValueError): - """Raised when a Key Vault reference is invalid.""" diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationkeyvaultoptions.py b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationkeyvaultoptions.py index 7a6519e1b9be..e5f2a5b17af6 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationkeyvaultoptions.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationkeyvaultoptions.py @@ -3,27 +3,53 @@ # Licensed under the MIT License. See License.txt in the project root for # license information. # ------------------------------------------------------------------------- - +from typing import overload, List, Optional, Callable +from azure.keyvault.secrets import SecretClient class AzureAppConfigurationKeyVaultOptions: - """ - Options for connecting to Key Vault. - :param credential: A credential for authenticating with the key vault. This is optional if secret_clients is - provided. - :type credential: ~azure.core.credentials.TokenCredential - :param secret_clients: A list of SecretClient from azure-keyvault-secrets. This is optional if credential is - provided. - :type secret_clients: list[~azure.keyvault.secrets.SecretClient] - :param secret_resolver: A function that takes a URI and returns a value. - :type secret_resolver: callable - """ + @overload + def __init__(self, credential, *, secret_clients: Optional[List[SecretClient]] = None): + """ + Options for connecting to Key Vault. + + :param credential: A credential for authenticating with the key vault. This is optional if secret_clients is + provided. + :type credential: ~azure.core.credentials.TokenCredential + :param secret_clients: A list of SecretClient from azure-keyvault-secrets. This is optional if credential is + provided. + :type secret_clients: list[~azure.keyvault.secrets.SecretClient] + """ + ... + + @overload + def __init__(self, secret_clients: List[SecretClient], * , secret_resolver: Optional[Callable[[str], str]] = None): + """ + Options for connecting to Key Vault. + + :param secret_clients: A list of SecretClient from azure-keyvault-secrets. This is optional if credential is + provided. + :type secret_clients: list[~azure.keyvault.secrets.SecretClient] + :param secret_resolver: A function that takes a URI and returns a value. + :type secret_resolver: Callable[[str], str] + """ + ... - def __init__(self, credential=None, secret_clients=None, secret_resolver=None): - # type: (TokenCredential, List[SecretClient], Callable) -> None - self.credential = credential - self.secret_clients = secret_clients - self.secret_resolver = secret_resolver + def __init__(self, **kwargs): + """ + Options for connecting to Key Vault. - if self.secret_clients is None: - self.secret_clients = {} + :param credential: A credential for authenticating with the key vault. This is optional if secret_clients is + provided. + :type credential: ~azure.core.credentials.TokenCredential + :param secret_clients: A list of SecretClient from azure-keyvault-secrets. This is optional if credential is + provided. + :type secret_clients: list[~azure.keyvault.secrets.SecretClient] + :param secret_resolver: A function that takes a URI and returns a value. + :type secret_resolver: Callable[[str], str] + """ + self.credential = kwargs.get("credential", None) + self.secret_clients = kwargs.get("secret_clients", {}) + self.secret_resolver = kwargs.get("secret_resolver", None) + if self.credential is not None and self.secret_resolver is not None: + raise ValueError("credential and secret_resolver can't both be configured.") diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationprovider.py b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationprovider.py index 85ca819d5a01..fb63a2195b97 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationprovider.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_azureappconfigurationprovider.py @@ -3,209 +3,253 @@ # Licensed under the MIT License. See License.txt in the project root for # license information. # ------------------------------------------------------------------------- - import json +from typing import overload, List, Tuple from azure.appconfiguration import AzureAppConfigurationClient from azure.keyvault.secrets import SecretClient, KeyVaultSecretIdentifier -from azure.core.exceptions import ResourceNotFoundError +from ._azureappconfigurationkeyvaultoptions import AzureAppConfigurationKeyVaultOptions from ._settingselector import SettingSelector -from ._azure_appconfiguration_provider_error import KeyVaultReferenceError from ._constants import KEY_VAULT_REFERENCE_CONTENT_TYPE from ._user_agent import USER_AGENT - -class AzureAppConfigurationProvider: +@overload +def load_provider(endpoint: str, credential: str, **kwargs): """ - Provides a dictionary-like interface to Azure App Configuration settings. Enables loading of sets of configuration - settings from Azure App Configuration into a Python application. Enables trimming of prefixes from configuration - keys. Enables resolution of Key Vault references in configuration settings. + Loads configuration settings from Azure App Configuration into a Python application. + + :keyword endpoint: Endpoint (one of connection_string or endpoint and credential must be set) + :type endpoint: str + :keyword credential: Credential (one of connection_string or endpoint and credential must be set) + :type credential: Union[AppConfigConnectionStringCredential, TokenCredential] + :keyword selects: List of setting selectors to filter configuration settings + :type selects: list[~azure.appconfigurationprovider.SettingSelector] + :keyword trim_prefixes: List of prefixes to trim from configuration keys + :type trim_prefixes: list[str] + :keyword key_vault_options: Options for resolving Key Vault references + :type key_vault_options: ~azure.appconfigurationprovider.KeyVaultOptions """ + ... - def __init__(self): - # type: () -> None - self._dict = {} - self._trim_prefixes = [] - self._client = None - - @classmethod - def load(cls, *, connection_string=None, endpoint=None, credential=None, **kwargs): - """ - Loads configuration settings from Azure App Configuration into a Python application. - - :keyword connection_string: Connection string (one of connection_string or endpoint and credential must be set) - :type connection_string: str - :keyword endpoint: Endpoint (one of connection_string or endpoint and credential must be set) - :type endpoint: str - :keyword credential: Credential (one of connection_string or endpoint and credential must be set) - :type credential: Union[AppConfigConnectionStringCredential, TokenCredential] - :keyword selects: List of setting selectors to filter configuration settings - :type selects: list[~azure.appconfigurationprovider.SettingSelector] - :keyword trim_prefixes: List of prefixes to trim from configuration keys - :type trim_prefixes: list[str] - :keyword key_vault_options: Options for resolving Key Vault references - :type key_vault_options: ~azure.appconfigurationprovider.KeyVaultOptions - """ - provider = AzureAppConfigurationProvider() - - key_vault_options = kwargs.pop("key_vault_options", None) - - provider.__buildprovider(connection_string, endpoint, credential, key_vault_options) +@overload +def load_provider(connection_string: str, **kwargs): + """ + Loads configuration settings from Azure App Configuration into a Python application. + + :keyword connection_string: Connection string (one of connection_string or endpoint and credential must be set) + :type connection_string: str + :keyword selects: List of setting selectors to filter configuration settings + :type selects: list[~azure.appconfigurationprovider.SettingSelector] + :keyword trim_prefixes: List of prefixes to trim from configuration keys + :type trim_prefixes: list[str] + :keyword key_vault_options: Options for resolving Key Vault references + :type key_vault_options: ~azure.appconfigurationprovider.KeyVaultOptions + """ + ... - selects = kwargs.pop("selects", {SettingSelector("*", "\0")}) +def load_provider(**kwargs): + """ + Loads configuration settings from Azure App Configuration into a Python application. + + :keyword connection_string: Connection string (one of connection_string or endpoint and credential must be set) + :type connection_string: str + :keyword endpoint: Endpoint (one of connection_string or endpoint and credential must be set) + :type endpoint: str + :keyword credential: Credential (one of connection_string or endpoint and credential must be set) + :type credential: Union[AppConfigConnectionStringCredential, TokenCredential] + :keyword selects: List of setting selectors to filter configuration settings + :type selects: list[~azure.appconfigurationprovider.SettingSelector] + :keyword trim_prefixes: List of prefixes to trim from configuration keys + :type trim_prefixes: list[str] + :keyword key_vault_options: Options for resolving Key Vault references + :type key_vault_options: ~azure.appconfigurationprovider.KeyVaultOptions + """ + #pylint:disable=protected-access + key_vault_options = kwargs.pop("key_vault_options", None) - provider._trim_prefixes = sorted(kwargs.pop("trimmed_key_prefixes", []), key=len, reverse=True) + connection_string = kwargs.pop("connection_string", None) + endpoint = kwargs.pop("endpoint", None) + credential = kwargs.pop("credential", None) - provider._dict = {} + provider = __buildprovider(connection_string, endpoint, credential, key_vault_options) - secret_clients = key_vault_options.secret_clients if key_vault_options else {} + selects = kwargs.pop("selects", {SettingSelector("*", "\0")}) - for select in selects: - configurations = provider._client.list_configuration_settings( - key_filter=select.key_filter, label_filter=select.label_filter - ) - for config in configurations: + provider._trim_prefixes = sorted(kwargs.pop("trimmed_key_prefixes", []), key=len, reverse=True) - trimmed_key = config.key - # Trim the key if it starts with one of the prefixes provided - for trim in provider._trim_prefixes: - if config.key.startswith(trim): - trimmed_key = config.key[len(trim) :] - break + secret_clients = key_vault_options.secret_clients if key_vault_options else {} - if config.content_type == KEY_VAULT_REFERENCE_CONTENT_TYPE: - secret = provider.__resolve_keyvault_reference(config, key_vault_options, secret_clients) - provider._dict[trimmed_key] = secret - elif provider.__is_json_content_type(config.content_type): - try: - j_object = json.loads(config.value) - provider._dict[trimmed_key] = j_object - except json.JSONDecodeError: - # If the value is not a valid JSON, treat it like regular string value - provider._dict[trimmed_key] = config.value - else: + for select in selects: + configurations = provider._client.list_configuration_settings( + key_filter=select.key_filter, label_filter=select.label_filter + ) + for config in configurations: + + trimmed_key = config.key + # Trim the key if it starts with one of the prefixes provided + for trim in provider._trim_prefixes: + if config.key.startswith(trim): + trimmed_key = config.key[len(trim) :] + break + + if config.content_type == KEY_VAULT_REFERENCE_CONTENT_TYPE: + secret = __resolve_keyvault_reference(config, key_vault_options, secret_clients) + provider._dict[trimmed_key] = secret + elif __is_json_content_type(config.content_type): + try: + j_object = json.loads(config.value) + provider._dict[trimmed_key] = j_object + except json.JSONDecodeError: + # If the value is not a valid JSON, treat it like regular string value provider._dict[trimmed_key] = config.value + else: + provider._dict[trimmed_key] = config.value + return provider + +def __buildprovider(connection_string:str, endpoint:str, credential, + key_vault_options:AzureAppConfigurationKeyVaultOptions): + provider = AzureAppConfigurationProvider() + headers = {} + correlation_context = "RequestType=Startup" + + if key_vault_options and ( + key_vault_options.credential or key_vault_options.secret_clients or key_vault_options.secret_resolver + ): + correlation_context += ",UsesKeyVault" + + headers["Correlation-Context"] = correlation_context + useragent = USER_AGENT + + if connection_string and endpoint: + raise AttributeError("Both connection_string and endpoint are set. Only one of these should be set.") + + if connection_string: + #pylint:disable=protected-access + provider._client = AzureAppConfigurationClient.from_connection_string( + connection_string, user_agent=useragent, headers=headers + ) return provider + #pylint:disable=protected-access + provider._client = AzureAppConfigurationClient(endpoint, credential, user_agent=useragent, headers=headers) + return provider - def __buildprovider(self, connection_string, endpoint, credential, key_vault_options): - headers = {} - correlation_context = "RequestType=Startup" +def __resolve_keyvault_reference(config, key_vault_options:AzureAppConfigurationKeyVaultOptions, + secret_clients: List[SecretClient]) -> str: + if key_vault_options is None: + raise AttributeError("Key Vault options must be set to resolve Key Vault references.") - if key_vault_options and ( - key_vault_options.credential or key_vault_options.secret_clients or key_vault_options.secret_resolver - ): - correlation_context += ",UsesKeyVault" + if config.secret_id is None: + raise AttributeError("Key Vault reference must have a uri value.") - headers["Correlation-Context"] = correlation_context - useragent = USER_AGENT + key_vault_identifier = KeyVaultSecretIdentifier(config.secret_id) - if connection_string and endpoint: - raise AttributeError("Both connection_string and endpoint are set. Only one of these should be set.") + referenced_client = next( + (client for client in secret_clients if client.vault_url == key_vault_identifier.vault_url), None + ) - if connection_string: - self._client = AzureAppConfigurationClient.from_connection_string( - connection_string, user_agent=useragent, headers=headers - ) - return - self._client = AzureAppConfigurationClient(endpoint, credential, user_agent=useragent, headers=headers) + if referenced_client is None and key_vault_options.credential is not None: + referenced_client = SecretClient( + vault_url=key_vault_identifier.vault_url, credential=key_vault_options.credential + ) + secret_clients[key_vault_identifier.vault_url] = referenced_client - @staticmethod - def __resolve_keyvault_reference(config, key_vault_options, secret_clients): - if key_vault_options is None: - raise AttributeError("Key Vault options must be set to resolve Key Vault references.") + if referenced_client: + return referenced_client.get_secret(key_vault_identifier.name, version=key_vault_identifier.version).value - if config.secret_id is None: - raise AttributeError("Key Vault reference must have a uri value.") + if key_vault_options.secret_resolver is not None: + return key_vault_options.secret_resolver(config.secret_id) - key_vault_identifier = KeyVaultSecretIdentifier(config.secret_id) + raise AttributeError( + "No Secret Client found for Key Vault reference %s" % (key_vault_identifier.vault_url) + ) - referenced_client = next( - (client for client in secret_clients if client.vault_url == key_vault_identifier.vault_url), None - ) +def __is_json_content_type(content_type: str) -> bool: + if not content_type: + return False - if referenced_client is None and key_vault_options.credential is not None: - referenced_client = SecretClient( - vault_url=key_vault_identifier.vault_url, credential=key_vault_options.credential - ) - secret_clients[key_vault_identifier.vault_url] = referenced_client - - if referenced_client: - try: - return referenced_client.get_secret( - key_vault_identifier.name, version=key_vault_identifier.version - ).value - except ResourceNotFoundError: - raise KeyVaultReferenceError( - "Key Vault %s does not contain secret %s" - % (key_vault_identifier.vault_url, key_vault_identifier.name) - ) - - if key_vault_options.secret_resolver is not None: - return key_vault_options.secret_resolver(config.secret_id) - raise KeyVaultReferenceError( - "No Secret Client found for Key Vault reference %s" % (key_vault_identifier.vault_url) - ) + content_type = content_type.strip().lower() + mime_type = content_type.split(";")[0].strip() - @staticmethod - def __is_json_content_type(content_type): - if not content_type: - return False + type_parts = mime_type.split("/") + if len(type_parts) != 2: + return False - content_type = content_type.strip().lower() - mime_type = content_type.split(";")[0].strip() + (main_type, sub_type) = type_parts + if main_type != "application": + return False - type_parts = mime_type.split("/") - if len(type_parts) != 2: - return False + sub_types = sub_type.split("+") + if "json" in sub_types: + return True - (main_type, sub_type) = type_parts - if main_type != "application": - return False + return False - sub_types = sub_type.split("+") - if "json" in sub_types: - return True +class AzureAppConfigurationProvider: - return False + """ + Provides a dictionary-like interface to Azure App Configuration settings. Enables loading of sets of configuration + settings from Azure App Configuration into a Python application. Enables trimming of prefixes from configuration + keys. Enables resolution of Key Vault references in configuration settings. + """ + def __init__(self): + self._dict = {} + self._trim_prefixes = [] + self._client = None - def __getitem__(self, key): + def __getitem__(self, key:str) -> str: + """ + Returns the value of the specified key. + """ return self._dict[key] - def __repr__(self): - return repr(self._dict) + def __iter__(self): + return self._dict.__iter__() def __len__(self): return len(self._dict) - def copy(self): + def __contains__(self, __x: object) -> bool: """ - Returns a copy of the configuration settings - - type: () -> dict - """ - return self._dict.copy() - - def __contains__(self, __x: object): - """ - Returns True if the configuration settings contains the specified key - - type: (object) -> bool + Returns True if the configuration settings contains the specified key. """ return self._dict.__contains__(__x) - def keys(self): + def keys(self) -> List[str]: """ Returns a list of keys loaded from Azure App Configuration. - - type: () -> list """ return self._dict.keys() - def values(self): + def items(self) -> List[Tuple[str, str]]: + """ + Returns a list of key-value pairs loaded from Azure App Configuration. Any values that are Key Vault references + will be resolved. + """ + return self._dict.items() + + def values(self) -> List[str]: """ Returns a list of values loaded from Azure App Configuration. Any values that are Key Vault references will be resolved. - - type: () -> list """ return self._dict.values() + + def get(self, key:str, default:str=None) -> str: + """ + Returns the value of the specified key. If the key does not exist, returns the default value. + """ + return self._dict.get(key, default) + + def __eq__(self, other): + if not isinstance(other, AzureAppConfigurationProvider): + return False + if self._dict != other._dict: + return False + if self._trim_prefixes != other._trim_prefixes: + return False + if self._client != other._client: + return False + return True + + def __ne__(self, other): + return not self == other diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_settingselector.py b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_settingselector.py index bef1b4668a6b..ca45ab2dc88f 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_settingselector.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_settingselector.py @@ -15,7 +15,6 @@ class SettingSelector: :type label_filter: str """ - def __init__(self, key_filter, label_filter="\0"): - # type: (str, str) -> None + def __init__(self, key_filter: str, label_filter:str="\0"): self.key_filter = key_filter self.label_filter = label_filter diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/samples/aad_sample.py b/sdk/appconfiguration/azure-appconfiguration-provider/samples/aad_sample.py index 4c875ad53b86..8512d9b50c55 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/samples/aad_sample.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/samples/aad_sample.py @@ -5,7 +5,7 @@ # ------------------------------------------------------------------------- from azure.appconfiguration.provider import ( - AzureAppConfigurationProvider, + load_provider, SettingSelector ) from azure.identity import DefaultAzureCredential @@ -15,22 +15,19 @@ credential = DefaultAzureCredential() # Connecting to Azure App Configuration using AAD -config = AzureAppConfigurationProvider.load( - endpoint=endpoint, credential=credential) +config = load_provider(endpoint=endpoint, credential=credential) print(config["message"]) # Connecting to Azure App Configuration using AAD and trimmed key prefixes trimmed = {"test."} -config = AzureAppConfigurationProvider.load( - endpoint=endpoint, credential=credential, trimmed_key_prefixes=trimmed) +config = load_provider(endpoint=endpoint, credential=credential, trimmed_key_prefixes=trimmed) print(config["message"]) # Connection to Azure App Configuration using SettingSelector selects = {SettingSelector("message*", "\0")} -config = AzureAppConfigurationProvider.load( - endpoint=endpoint, credential=credential, selects=selects) +config = load_provider(endpoint=endpoint, credential=credential, selects=selects) print("message found: " + str("message" in config)) print("test.message found: " + str("test.message" in config)) diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/samples/connection_string_sample.py b/sdk/appconfiguration/azure-appconfiguration-provider/samples/connection_string_sample.py index c18a5f989fbb..ac7dcd59b4cc 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/samples/connection_string_sample.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/samples/connection_string_sample.py @@ -5,7 +5,7 @@ # ------------------------------------------------------------------------- from azure.appconfiguration.provider import ( - AzureAppConfigurationProvider, + load_provider, SettingSelector ) import os @@ -13,23 +13,20 @@ connection_string = os.environ.get("AZURE_APPCONFIG_CONNECTION_STRING") # Connecting to Azure App Configuration using connection string -config = AzureAppConfigurationProvider.load( - connection_string=connection_string) +config = load_provider(connection_string=connection_string) print(config["message"]) print(config["my_json"]["key"]) # Connecting to Azure App Configuration using connection string and trimmed key prefixes trimmed = {"test."} -config = AzureAppConfigurationProvider.load( - connection_string=connection_string, trimmed_key_prefixes=trimmed) +config = load_provider(connection_string=connection_string, trimmed_key_prefixes=trimmed) print(config["message"]) # Connection to Azure App Configuration using SettingSelector selects = {SettingSelector("message*", "\0")} -config = AzureAppConfigurationProvider.load( - connection_string=connection_string, selects=selects) +config = load_provider(connection_string=connection_string, selects=selects) print("message found: " + str("message" in config)) print("test.message found: " + str("test.message" in config)) diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/samples/key_vault_reference_provided_clients_sample.py b/sdk/appconfiguration/azure-appconfiguration-provider/samples/key_vault_reference_provided_clients_sample.py index 8d67f617c34c..665bdfb860ec 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/samples/key_vault_reference_provided_clients_sample.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/samples/key_vault_reference_provided_clients_sample.py @@ -5,7 +5,7 @@ # ------------------------------------------------------------------------- from azure.appconfiguration.provider import ( - AzureAppConfigurationProvider, + load_provider, AzureAppConfigurationKeyVaultOptions, SettingSelector ) @@ -22,7 +22,6 @@ selects = {SettingSelector("*", "prod")} key_vault_options = AzureAppConfigurationKeyVaultOptions(secret_clients=[ secret_client]) -config = AzureAppConfigurationProvider.load( - endpoint=endpoint, credential=credential, key_vault_options=key_vault_options, selects=selects) +config = load_provider(endpoint=endpoint, credential=credential, key_vault_options=key_vault_options, selects=selects) print(config["secret"]) diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/samples/key_vault_reference_sample.py b/sdk/appconfiguration/azure-appconfiguration-provider/samples/key_vault_reference_sample.py index 4e02cb434197..a62635c27b70 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/samples/key_vault_reference_sample.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/samples/key_vault_reference_sample.py @@ -5,7 +5,7 @@ # ------------------------------------------------------------------------- from azure.appconfiguration.provider import ( - AzureAppConfigurationProvider, + load_provider, AzureAppConfigurationKeyVaultOptions, SettingSelector ) @@ -19,7 +19,6 @@ key_vault_options = AzureAppConfigurationKeyVaultOptions(credential=credential) selects = {SettingSelector("*", "prod")} -config = AzureAppConfigurationProvider.load( - endpoint=endpoint, credential=credential, key_vault_options=key_vault_options, selects=selects) +config = load_provider(endpoint=endpoint, credential=credential, key_vault_options=key_vault_options, selects=selects) print(config["secret"]) diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/tests/test_provider.py b/sdk/appconfiguration/azure-appconfiguration-provider/tests/test_provider.py index ec14c4a5bad8..1de07c2e6bab 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/tests/test_provider.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/tests/test_provider.py @@ -4,7 +4,7 @@ # license information. # -------------------------------------------------------------------------- from azure.appconfiguration.provider import ( - AzureAppConfigurationProvider, + load_provider, SettingSelector ) from devtools_testutils import ( @@ -17,7 +17,7 @@ class TestAppConfigurationProvider(AzureRecordedTestCase): def build_provider(self, connection_string, trimmed_key_prefixes=[], selects={SettingSelector("*", "\0")}): - return AzureAppConfigurationProvider.load(connection_string=connection_string, trimmed_key_prefixes=trimmed_key_prefixes, selects=selects) + return load_provider(connection_string=connection_string, trimmed_key_prefixes=trimmed_key_prefixes, selects=selects) # method: provider_creation @recorded_by_proxy diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/tests/test_provider_aad.py b/sdk/appconfiguration/azure-appconfiguration-provider/tests/test_provider_aad.py index f68bee1436e1..a3bfbb7eee9d 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/tests/test_provider_aad.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/tests/test_provider_aad.py @@ -4,7 +4,7 @@ # license information. # -------------------------------------------------------------------------- from azure.appconfiguration.provider import ( - AzureAppConfigurationProvider, + load_provider, SettingSelector ) from devtools_testutils import ( @@ -18,7 +18,7 @@ class TestAppConfigurationProvider(AzureRecordedTestCase): def build_provider_aad(self, endpoint, trimmed_key_prefixes=[], selects={SettingSelector("*", "\0")}): cred = self.get_credential(AzureAppConfigurationClient) - return AzureAppConfigurationProvider.load(credential=cred, endpoint=endpoint, trimmed_key_prefixes=trimmed_key_prefixes, selects=selects) + return load_provider(credential=cred, endpoint=endpoint, trimmed_key_prefixes=trimmed_key_prefixes, selects=selects) # method: provider_creation_aad @recorded_by_proxy