Skip to content

Commit de7adba

Browse files
authored
[Key Vault] Generate Secrets with TypeSpec (Azure#36901)
1 parent 31915bc commit de7adba

29 files changed

+2672
-1337
lines changed

sdk/keyvault/azure-keyvault-secrets/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
### Bugs Fixed
1010

1111
### Other Changes
12+
- Updated minimum `typing-extensions` version to 4.6.0
1213

1314
## 4.9.0 (2024-10-17)
1415

sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_client.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ def get_secret(self, name: str, version: Optional[str] = None, **kwargs: Any) ->
6363
:dedent: 8
6464
"""
6565
bundle = self._client.get_secret(
66-
vault_base_url=self._vault_url,
6766
secret_name=name,
6867
secret_version=version or "",
6968
**kwargs
@@ -126,7 +125,6 @@ def set_secret(
126125
)
127126

128127
bundle = self._client.set_secret(
129-
vault_base_url=self.vault_url,
130128
secret_name=name,
131129
parameters=parameters,
132130
**kwargs
@@ -190,7 +188,6 @@ def update_secret_properties(
190188
)
191189

192190
bundle = self._client.update_secret(
193-
self.vault_url,
194191
name,
195192
secret_version=version or "",
196193
parameters=parameters,
@@ -217,7 +214,6 @@ def list_properties_of_secrets(self, **kwargs: Any) -> ItemPaged[SecretPropertie
217214
218215
"""
219216
return self._client.get_secrets(
220-
self._vault_url,
221217
maxresults=kwargs.pop("max_page_size", None),
222218
cls=lambda objs: [SecretProperties._from_secret_item(x) for x in objs],
223219
**kwargs
@@ -244,7 +240,6 @@ def list_properties_of_secret_versions(self, name: str, **kwargs: Any) -> ItemPa
244240
245241
"""
246242
return self._client.get_secret_versions(
247-
self._vault_url,
248243
name,
249244
maxresults=kwargs.pop("max_page_size", None),
250245
cls=lambda objs: [SecretProperties._from_secret_item(x) for x in objs],
@@ -272,7 +267,7 @@ def backup_secret(self, name: str, **kwargs: Any) -> bytes:
272267
:dedent: 8
273268
274269
"""
275-
backup_result = self._client.backup_secret(self.vault_url, name, **kwargs)
270+
backup_result = self._client.backup_secret(name, **kwargs)
276271
return cast(bytes, backup_result.value)
277272

278273
@distributed_trace
@@ -297,7 +292,6 @@ def restore_secret_backup(self, backup: bytes, **kwargs: Any) -> SecretPropertie
297292
298293
"""
299294
bundle = self._client.restore_secret(
300-
self.vault_url,
301295
parameters=self._models.SecretRestoreParameters(secret_bundle_backup=backup),
302296
**kwargs
303297
)
@@ -336,7 +330,6 @@ def begin_delete_secret(self, name: str, **kwargs: Any) -> LROPoller[DeletedSecr
336330
polling_interval = 2
337331
# Ignore pyright warning about return type not being iterable because we use `cls` to return a tuple
338332
pipeline_response, deleted_secret_bundle = self._client.delete_secret(
339-
vault_base_url=self.vault_url,
340333
secret_name=name,
341334
cls=lambda pipeline_response, deserialized, _: (pipeline_response, deserialized),
342335
**kwargs,
@@ -375,7 +368,7 @@ def get_deleted_secret(self, name: str, **kwargs: Any) -> DeletedSecret:
375368
:dedent: 8
376369
377370
"""
378-
bundle = self._client.get_deleted_secret(self.vault_url, name, **kwargs)
371+
bundle = self._client.get_deleted_secret(name, **kwargs)
379372
return DeletedSecret._from_deleted_secret_bundle(bundle)
380373

381374
@distributed_trace
@@ -397,7 +390,6 @@ def list_deleted_secrets(self, **kwargs: Any) -> ItemPaged[DeletedSecret]:
397390
398391
"""
399392
return self._client.get_deleted_secrets(
400-
self._vault_url,
401393
maxresults=kwargs.pop("max_page_size", None),
402394
cls=lambda objs: [DeletedSecret._from_deleted_secret_item(x) for x in objs],
403395
**kwargs
@@ -428,7 +420,7 @@ def purge_deleted_secret(self, name: str, **kwargs: Any) -> None:
428420
secret_client.purge_deleted_secret("secret-name")
429421
430422
"""
431-
self._client.purge_deleted_secret(self.vault_url, name, **kwargs)
423+
self._client.purge_deleted_secret(name, **kwargs)
432424

433425
@distributed_trace
434426
def begin_recover_deleted_secret(self, name: str, **kwargs: Any) -> LROPoller[SecretProperties]:
@@ -465,7 +457,6 @@ def begin_recover_deleted_secret(self, name: str, **kwargs: Any) -> LROPoller[Se
465457
polling_interval = 2
466458
# Ignore pyright warning about return type not being iterable because we use `cls` to return a tuple
467459
pipeline_response, recovered_secret_bundle = self._client.recover_deleted_secret(
468-
vault_base_url=self.vault_url,
469460
secret_name=name,
470461
cls=lambda pipeline_response, deserialized, _: (pipeline_response, deserialized),
471462
**kwargs,

sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/__init__.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,31 @@
22
# --------------------------------------------------------------------------
33
# Copyright (c) Microsoft Corporation. All rights reserved.
44
# Licensed under the MIT License. See License.txt in the project root for license information.
5-
# Code generated by Microsoft (R) AutoRest Code Generator.
5+
# Code generated by Microsoft (R) Python Code Generator.
66
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
77
# --------------------------------------------------------------------------
8+
# pylint: disable=wrong-import-position
89

9-
from ._client import KeyVaultClient
10+
from typing import TYPE_CHECKING
11+
12+
if TYPE_CHECKING:
13+
from ._patch import * # pylint: disable=unused-wildcard-import
14+
15+
from ._client import KeyVaultClient # type: ignore
16+
from ._version import VERSION
17+
18+
__version__ = VERSION
1019

1120
try:
1221
from ._patch import __all__ as _patch_all
13-
from ._patch import * # pylint: disable=unused-wildcard-import
22+
from ._patch import *
1423
except ImportError:
1524
_patch_all = []
1625
from ._patch import patch_sdk as _patch_sdk
1726

1827
__all__ = [
1928
"KeyVaultClient",
2029
]
21-
__all__.extend([p for p in _patch_all if p not in __all__])
30+
__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore
2231

2332
_patch_sdk()

sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_client.py

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,42 @@
22
# --------------------------------------------------------------------------
33
# Copyright (c) Microsoft Corporation. All rights reserved.
44
# Licensed under the MIT License. See License.txt in the project root for license information.
5-
# Code generated by Microsoft (R) AutoRest Code Generator.
5+
# Code generated by Microsoft (R) Python Code Generator.
66
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
77
# --------------------------------------------------------------------------
88

99
from copy import deepcopy
10-
from typing import Any
10+
from typing import Any, TYPE_CHECKING
11+
from typing_extensions import Self
1112

1213
from azure.core import PipelineClient
1314
from azure.core.pipeline import policies
1415
from azure.core.rest import HttpRequest, HttpResponse
1516

16-
from . import models as _models
1717
from ._configuration import KeyVaultClientConfiguration
1818
from ._operations import KeyVaultClientOperationsMixin
1919
from ._serialization import Deserializer, Serializer
2020

21+
if TYPE_CHECKING:
22+
from azure.core.credentials import TokenCredential
2123

22-
class KeyVaultClient(KeyVaultClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword
24+
25+
class KeyVaultClient(KeyVaultClientOperationsMixin):
2326
"""The key vault client performs cryptographic key operations and vault operations against the Key
2427
Vault service.
2528
26-
:keyword api_version: Api Version. Default value is "7.5". Note that overriding this default
27-
value may result in unsupported behavior.
29+
:param vault_base_url: Required.
30+
:type vault_base_url: str
31+
:param credential: Credential used to authenticate requests to the service. Required.
32+
:type credential: ~azure.core.credentials.TokenCredential
33+
:keyword api_version: The API version to use for this operation. Default value is
34+
"7.6-preview.2". Note that overriding this default value may result in unsupported behavior.
2835
:paramtype api_version: str
2936
"""
3037

31-
def __init__(self, **kwargs: Any) -> None: # pylint: disable=missing-client-constructor-parameter-credential
38+
def __init__(self, vault_base_url: str, credential: "TokenCredential", **kwargs: Any) -> None:
3239
_endpoint = "{vaultBaseUrl}"
33-
self._config = KeyVaultClientConfiguration(**kwargs)
40+
self._config = KeyVaultClientConfiguration(vault_base_url=vault_base_url, credential=credential, **kwargs)
3441
_policies = kwargs.pop("policies", None)
3542
if _policies is None:
3643
_policies = [
@@ -50,10 +57,8 @@ def __init__(self, **kwargs: Any) -> None: # pylint: disable=missing-client-con
5057
]
5158
self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs)
5259

53-
client_models = {k: v for k, v in _models._models.__dict__.items() if isinstance(v, type)}
54-
client_models.update({k: v for k, v in _models.__dict__.items() if isinstance(v, type)})
55-
self._serialize = Serializer(client_models)
56-
self._deserialize = Deserializer(client_models)
60+
self._serialize = Serializer()
61+
self._deserialize = Deserializer()
5762
self._serialize.client_side_validation = False
5863

5964
def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse:
@@ -75,13 +80,19 @@ def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs:
7580
"""
7681

7782
request_copy = deepcopy(request)
78-
request_copy.url = self._client.format_url(request_copy.url)
83+
path_format_arguments = {
84+
"vaultBaseUrl": self._serialize.url(
85+
"self._config.vault_base_url", self._config.vault_base_url, "str", skip_quote=True
86+
),
87+
}
88+
89+
request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments)
7990
return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore
8091

8192
def close(self) -> None:
8293
self._client.close()
8394

84-
def __enter__(self) -> "KeyVaultClient":
95+
def __enter__(self) -> Self:
8596
self._client.__enter__()
8697
return self
8798

sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_configuration.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,18 @@
22
# --------------------------------------------------------------------------
33
# Copyright (c) Microsoft Corporation. All rights reserved.
44
# Licensed under the MIT License. See License.txt in the project root for license information.
5-
# Code generated by Microsoft (R) AutoRest Code Generator.
5+
# Code generated by Microsoft (R) Python Code Generator.
66
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
77
# --------------------------------------------------------------------------
88

9-
from typing import Any
9+
from typing import Any, TYPE_CHECKING
1010

1111
from azure.core.pipeline import policies
1212

13-
VERSION = "unknown"
13+
from ._version import VERSION
14+
15+
if TYPE_CHECKING:
16+
from azure.core.credentials import TokenCredential
1417

1518

1619
class KeyVaultClientConfiguration: # pylint: disable=too-many-instance-attributes
@@ -19,16 +22,28 @@ class KeyVaultClientConfiguration: # pylint: disable=too-many-instance-attribut
1922
Note that all parameters used to create this instance are saved as instance
2023
attributes.
2124
22-
:keyword api_version: Api Version. Default value is "7.5". Note that overriding this default
23-
value may result in unsupported behavior.
25+
:param vault_base_url: Required.
26+
:type vault_base_url: str
27+
:param credential: Credential used to authenticate requests to the service. Required.
28+
:type credential: ~azure.core.credentials.TokenCredential
29+
:keyword api_version: The API version to use for this operation. Default value is
30+
"7.6-preview.2". Note that overriding this default value may result in unsupported behavior.
2431
:paramtype api_version: str
2532
"""
2633

27-
def __init__(self, **kwargs: Any) -> None:
28-
api_version: str = kwargs.pop("api_version", "7.5")
34+
def __init__(self, vault_base_url: str, credential: "TokenCredential", **kwargs: Any) -> None:
35+
api_version: str = kwargs.pop("api_version", "7.6-preview.2")
36+
37+
if vault_base_url is None:
38+
raise ValueError("Parameter 'vault_base_url' must not be None.")
39+
if credential is None:
40+
raise ValueError("Parameter 'credential' must not be None.")
2941

42+
self.vault_base_url = vault_base_url
43+
self.credential = credential
3044
self.api_version = api_version
31-
kwargs.setdefault("sdk_moniker", "keyvault/{}".format(VERSION))
45+
self.credential_scopes = kwargs.pop("credential_scopes", ["https://vault.azure.net/.default"])
46+
kwargs.setdefault("sdk_moniker", "keyvault-secrets/{}".format(VERSION))
3247
self.polling_interval = kwargs.get("polling_interval", 30)
3348
self._configure(**kwargs)
3449

@@ -42,3 +57,7 @@ def _configure(self, **kwargs: Any) -> None:
4257
self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs)
4358
self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs)
4459
self.authentication_policy = kwargs.get("authentication_policy")
60+
if self.credential and not self.authentication_policy:
61+
self.authentication_policy = policies.BearerTokenCredentialPolicy(
62+
self.credential, *self.credential_scopes, **kwargs
63+
)

0 commit comments

Comments
 (0)