Skip to content

Commit 3d9629b

Browse files
authored
[Key Vault] Generate Keys with TypeSpec (Azure#36902)
1 parent ef180f1 commit 3d9629b

37 files changed

+4656
-2755
lines changed

sdk/keyvault/azure-keyvault-keys/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.10.0 (2024-10-17)
1415

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

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ def create_key(
184184
release_policy=policy,
185185
)
186186

187-
bundle = self._client.create_key(vault_base_url=self.vault_url, key_name=name, parameters=parameters, **kwargs)
187+
bundle = self._client.create_key(key_name=name, parameters=parameters, **kwargs)
188188
return KeyVaultKey._from_key_bundle(bundle)
189189

190190
@distributed_trace
@@ -429,7 +429,6 @@ def begin_delete_key(self, name: str, **kwargs: Any) -> LROPoller[DeletedKey]:
429429
if polling_interval is None:
430430
polling_interval = 2
431431
pipeline_response, deleted_key_bundle = self._client.delete_key(
432-
vault_base_url=self.vault_url,
433432
key_name=name,
434433
cls=lambda pipeline_response, deserialized, _: (pipeline_response, deserialized),
435434
**kwargs,
@@ -472,7 +471,7 @@ def get_key(self, name: str, version: Optional[str] = None, **kwargs: Any) -> Ke
472471
:caption: Get a key
473472
:dedent: 8
474473
"""
475-
bundle = self._client.get_key(self.vault_url, name, key_version=version or "", **kwargs)
474+
bundle = self._client.get_key(name, key_version=version or "", **kwargs)
476475
return KeyVaultKey._from_key_bundle(bundle)
477476

478477
@distributed_trace
@@ -497,7 +496,7 @@ def get_deleted_key(self, name: str, **kwargs: Any) -> DeletedKey:
497496
:caption: Get a deleted key
498497
:dedent: 8
499498
"""
500-
bundle = self._client.get_deleted_key(self.vault_url, name, **kwargs)
499+
bundle = self._client.get_deleted_key(name, **kwargs)
501500
return DeletedKey._from_deleted_key_bundle(bundle)
502501

503502
@distributed_trace
@@ -518,7 +517,6 @@ def list_deleted_keys(self, **kwargs: Any) -> ItemPaged[DeletedKey]:
518517
:dedent: 8
519518
"""
520519
return self._client.get_deleted_keys(
521-
self._vault_url,
522520
maxresults=kwargs.pop("max_page_size", None),
523521
cls=lambda objs: [DeletedKey._from_deleted_key_item(x) for x in objs],
524522
**kwargs
@@ -542,7 +540,6 @@ def list_properties_of_keys(self, **kwargs: Any) -> ItemPaged[KeyProperties]:
542540
:dedent: 8
543541
"""
544542
return self._client.get_keys(
545-
self._vault_url,
546543
maxresults=kwargs.pop("max_page_size", None),
547544
cls=lambda objs: [KeyProperties._from_key_item(x) for x in objs],
548545
**kwargs
@@ -568,7 +565,6 @@ def list_properties_of_key_versions(self, name: str, **kwargs: Any) -> ItemPaged
568565
:dedent: 8
569566
"""
570567
return self._client.get_key_versions(
571-
self._vault_url,
572568
name,
573569
maxresults=kwargs.pop("max_page_size", None),
574570
cls=lambda objs: [KeyProperties._from_key_item(x) for x in objs],
@@ -600,7 +596,7 @@ def purge_deleted_key(self, name: str, **kwargs: Any) -> None:
600596
key_client.purge_deleted_key("key-name")
601597
602598
"""
603-
self._client.purge_deleted_key(vault_base_url=self.vault_url, key_name=name, **kwargs)
599+
self._client.purge_deleted_key(key_name=name, **kwargs)
604600

605601
@distributed_trace
606602
def begin_recover_deleted_key(self, name: str, **kwargs: Any) -> LROPoller[KeyVaultKey]:
@@ -634,7 +630,6 @@ def begin_recover_deleted_key(self, name: str, **kwargs: Any) -> LROPoller[KeyVa
634630
if polling_interval is None:
635631
polling_interval = 2
636632
pipeline_response, recovered_key_bundle = self._client.recover_deleted_key(
637-
vault_base_url=self.vault_url,
638633
key_name=name,
639634
cls=lambda pipeline_response, deserialized, _: (pipeline_response, deserialized),
640635
**kwargs,
@@ -715,7 +710,7 @@ def update_key_properties(
715710
)
716711

717712
bundle = self._client.update_key(
718-
self.vault_url, name, key_version=version or "", parameters=parameters, **kwargs
713+
name, key_version=version or "", parameters=parameters, **kwargs
719714
)
720715
return KeyVaultKey._from_key_bundle(bundle)
721716

@@ -745,7 +740,7 @@ def backup_key(self, name: str, **kwargs: Any) -> bytes:
745740
:caption: Get a key backup
746741
:dedent: 8
747742
"""
748-
backup_result = self._client.backup_key(self.vault_url, name, **kwargs)
743+
backup_result = self._client.backup_key(name, **kwargs)
749744
return backup_result.value
750745

751746
@distributed_trace
@@ -775,7 +770,6 @@ def restore_key_backup(self, backup: bytes, **kwargs: Any) -> KeyVaultKey:
775770
:dedent: 8
776771
"""
777772
bundle = self._client.restore_key(
778-
self.vault_url,
779773
parameters=self._models.KeyRestoreParameters(key_bundle_backup=backup),
780774
**kwargs
781775
)
@@ -841,7 +835,7 @@ def import_key(
841835
release_policy=policy,
842836
)
843837

844-
bundle = self._client.import_key(self.vault_url, name, parameters=parameters, **kwargs)
838+
bundle = self._client.import_key(name, parameters=parameters, **kwargs)
845839
return KeyVaultKey._from_key_bundle(bundle)
846840

847841
@distributed_trace
@@ -876,7 +870,6 @@ def release_key(
876870
:raises ~azure.core.exceptions.HttpResponseError:
877871
"""
878872
result = self._client.release(
879-
vault_base_url=self._vault_url,
880873
key_name=name,
881874
key_version=version or "",
882875
parameters=self._models.KeyReleaseParameters(
@@ -911,7 +904,7 @@ def get_random_bytes(self, count: int, **kwargs: Any) -> bytes:
911904
if count < 1:
912905
raise ValueError("At least one random byte must be requested")
913906
parameters = self._models.GetRandomBytesRequest(count=count)
914-
result = self._client.get_random_bytes(vault_base_url=self._vault_url, parameters=parameters, **kwargs)
907+
result = self._client.get_random_bytes(parameters=parameters, **kwargs)
915908
return result.value
916909

917910
@distributed_trace
@@ -925,7 +918,7 @@ def get_key_rotation_policy(self, key_name: str, **kwargs: Any) -> KeyRotationPo
925918
926919
:raises ~azure.core.exceptions.HttpResponseError:
927920
"""
928-
policy = self._client.get_key_rotation_policy(vault_base_url=self._vault_url, key_name=key_name, **kwargs)
921+
policy = self._client.get_key_rotation_policy(key_name=key_name, **kwargs)
929922
return KeyRotationPolicy._from_generated(policy)
930923

931924
@distributed_trace
@@ -941,11 +934,11 @@ def rotate_key(self, name: str, **kwargs: Any) -> KeyVaultKey:
941934
942935
:raises ~azure.core.exceptions.HttpResponseError:
943936
"""
944-
bundle = self._client.rotate_key(vault_base_url=self._vault_url, key_name=name, **kwargs)
937+
bundle = self._client.rotate_key(key_name=name, **kwargs)
945938
return KeyVaultKey._from_key_bundle(bundle)
946939

947940
@distributed_trace
948-
def update_key_rotation_policy(
941+
def update_key_rotation_policy( # pylint: disable=unused-argument
949942
self,
950943
key_name: str,
951944
policy: KeyRotationPolicy,
@@ -989,9 +982,7 @@ def update_key_rotation_policy(
989982

990983
attributes = self._models.KeyRotationPolicyAttributes(expiry_time=expires_in or policy.expires_in)
991984
new_policy = self._models.KeyRotationPolicy(lifetime_actions=actions or [], attributes=attributes)
992-
result = self._client.update_key_rotation_policy(
993-
vault_base_url=self._vault_url, key_name=key_name, key_rotation_policy=new_policy, **kwargs
994-
)
985+
result = self._client.update_key_rotation_policy(key_name=key_name, key_rotation_policy=new_policy)
995986
return KeyRotationPolicy._from_generated(result)
996987

997988
def __enter__(self) -> "KeyClient":

sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_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-keys/azure/keyvault/keys/_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-keys/azure/keyvault/keys/_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-keys/{}".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)