Skip to content

Commit 31915bc

Browse files
authored
[Key Vault] Generate Administration with TypeSpec (#36915)
1 parent f14ef35 commit 31915bc

31 files changed

+6042
-3407
lines changed

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

+1
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.5.0 (2024-10-17)
1415

sdk/keyvault/azure-keyvault-administration/assets.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"AssetsRepo": "Azure/azure-sdk-assets",
33
"AssetsRepoPrefixPath": "python",
44
"TagPrefix": "python/keyvault/azure-keyvault-administration",
5-
"Tag": "python/keyvault/azure-keyvault-administration_b16e831fc9"
5+
"Tag": "python/keyvault/azure-keyvault-administration_a67edcfd4d"
66
}

sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_access_control_client.py

+17-14
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010
from azure.core.tracing.decorator import distributed_trace
1111

1212
from ._enums import KeyVaultRoleScope
13+
from ._generated.models import (
14+
Permission,
15+
RoleAssignmentCreateParameters,
16+
RoleAssignmentProperties,
17+
RoleDefinitionCreateParameters,
18+
RoleDefinitionProperties,
19+
)
1320
from ._models import KeyVaultPermission, KeyVaultRoleAssignment, KeyVaultRoleDefinition
1421
from ._internal import KeyVaultClientBase
1522

@@ -59,13 +66,12 @@ def create_role_assignment(
5966
"""
6067
assignment_name = name or uuid4()
6168

62-
create_parameters = self._client.role_assignments.models.RoleAssignmentCreateParameters(
63-
properties=self._client.role_assignments.models.RoleAssignmentProperties(
69+
create_parameters = RoleAssignmentCreateParameters(
70+
properties=RoleAssignmentProperties(
6471
principal_id=principal_id, role_definition_id=str(definition_id)
6572
)
6673
)
6774
assignment = self._client.role_assignments.create(
68-
vault_base_url=self._vault_url,
6975
scope=scope,
7076
role_assignment_name=str(assignment_name),
7177
parameters=create_parameters,
@@ -90,7 +96,7 @@ def delete_role_assignment(
9096
"""
9197
try:
9298
self._client.role_assignments.delete(
93-
vault_base_url=self._vault_url, scope=scope, role_assignment_name=str(name), **kwargs
99+
scope=scope, role_assignment_name=str(name), **kwargs
94100
)
95101
except ResourceNotFoundError:
96102
pass
@@ -111,7 +117,7 @@ def get_role_assignment(
111117
:rtype: ~azure.keyvault.administration.KeyVaultRoleAssignment
112118
"""
113119
assignment = self._client.role_assignments.get(
114-
vault_base_url=self._vault_url, scope=scope, role_assignment_name=str(name), **kwargs
120+
scope=scope, role_assignment_name=str(name), **kwargs
115121
)
116122
return KeyVaultRoleAssignment._from_generated(assignment)
117123

@@ -129,7 +135,6 @@ def list_role_assignments(
129135
:rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.administration.KeyVaultRoleAssignment]
130136
"""
131137
return self._client.role_assignments.list_for_scope(
132-
vault_base_url=self._vault_url,
133138
scope=scope,
134139
cls=lambda result: [KeyVaultRoleAssignment._from_generated(a) for a in result],
135140
**kwargs
@@ -144,7 +149,7 @@ def set_role_definition(
144149
role_name: Optional[str] = None,
145150
description: Optional[str] = None,
146151
permissions: Optional[List[KeyVaultPermission]] = None,
147-
assignable_scopes: Optional[Union[List[str], List[KeyVaultRoleScope]]] = None,
152+
assignable_scopes: Optional[List[Union[str, KeyVaultRoleScope]]] = None,
148153
**kwargs: Any,
149154
) -> KeyVaultRoleDefinition:
150155
"""Creates or updates a custom role definition.
@@ -175,7 +180,7 @@ def set_role_definition(
175180
:rtype: ~azure.keyvault.administration.KeyVaultRoleDefinition
176181
"""
177182
role_permissions = [
178-
self._client.role_definitions.models.Permission(
183+
Permission(
179184
actions=p.actions,
180185
not_actions=p.not_actions,
181186
data_actions=p.data_actions,
@@ -184,16 +189,15 @@ def set_role_definition(
184189
for p in permissions or []
185190
]
186191

187-
properties = self._client.role_definitions.models.RoleDefinitionProperties(
192+
properties = RoleDefinitionProperties(
188193
role_name=role_name,
189194
description=description,
190195
permissions=role_permissions,
191196
assignable_scopes=assignable_scopes,
192197
)
193-
parameters = self._client.role_definitions.models.RoleDefinitionCreateParameters(properties=properties)
198+
parameters = RoleDefinitionCreateParameters(properties=properties)
194199

195200
definition = self._client.role_definitions.create_or_update(
196-
vault_base_url=self._vault_url,
197201
scope=scope,
198202
role_definition_name=str(name or uuid4()),
199203
parameters=parameters,
@@ -217,7 +221,7 @@ def get_role_definition(
217221
:rtype: ~azure.keyvault.administration.KeyVaultRoleDefinition
218222
"""
219223
definition = self._client.role_definitions.get(
220-
vault_base_url=self._vault_url, scope=scope, role_definition_name=str(name), **kwargs
224+
scope=scope, role_definition_name=str(name), **kwargs
221225
)
222226
return KeyVaultRoleDefinition._from_generated(definition)
223227

@@ -238,7 +242,7 @@ def delete_role_definition(
238242
"""
239243
try:
240244
self._client.role_definitions.delete(
241-
vault_base_url=self._vault_url, scope=scope, role_definition_name=str(name), **kwargs
245+
scope=scope, role_definition_name=str(name), **kwargs
242246
)
243247
except ResourceNotFoundError:
244248
pass
@@ -257,7 +261,6 @@ def list_role_definitions(
257261
:rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.administration.KeyVaultRoleDefinition]
258262
"""
259263
return self._client.role_definitions.list(
260-
vault_base_url=self._vault_url,
261264
scope=scope,
262265
cls=lambda result: [KeyVaultRoleDefinition._from_generated(d) for d in result],
263266
**kwargs

sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_backup_client.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,13 @@ def begin_backup( # pylint: disable=docstring-missing-param,docstring-keyword-s
116116
) from ex
117117

118118
pipeline_response = self._client.full_backup_status(
119-
vault_base_url=self._vault_url, job_id=job_id, cls=lambda pipeline_response, _, __: pipeline_response
119+
job_id=job_id, cls=lambda pipeline_response, _, __: pipeline_response
120120
)
121121
if "azure-asyncoperation" not in pipeline_response.http_response.headers:
122122
pipeline_response.http_response.headers["azure-asyncoperation"] = status_url
123123
status_response = base64.b64encode(pickle.dumps(pipeline_response)).decode("ascii")
124124

125125
return self._client.begin_full_backup(
126-
vault_base_url=self._vault_url,
127126
azure_storage_blob_container_uri=sas_parameter,
128127
cls=KeyVaultBackupResult._from_generated, # pylint: disable=protected-access
129128
continuation_token=status_response,
@@ -220,7 +219,7 @@ def begin_restore( # pylint: disable=docstring-missing-param,docstring-keyword-
220219
) from ex
221220

222221
pipeline_response = self._client.restore_status(
223-
vault_base_url=self._vault_url, job_id=job_id, cls=lambda pipeline_response, _, __: pipeline_response
222+
job_id=job_id, cls=lambda pipeline_response, _, __: pipeline_response
224223
)
225224
if "azure-asyncoperation" not in pipeline_response.http_response.headers:
226225
pipeline_response.http_response.headers["azure-asyncoperation"] = status_url
@@ -246,7 +245,6 @@ def begin_restore( # pylint: disable=docstring-missing-param,docstring-keyword-
246245
)
247246

248247
return client_method(
249-
vault_base_url=self._vault_url,
250248
restore_blob_details=restore_details,
251249
cls=lambda *_: None, # poller.result() returns None
252250
continuation_token=status_response,

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

+13-4
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-administration/azure/keyvault/administration/_generated/_client.py

+30-19
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,48 @@
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 ._serialization import Deserializer, Serializer
1919
from .operations import KeyVaultClientOperationsMixin, RoleAssignmentsOperations, RoleDefinitionsOperations
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-
:ivar role_definitions: RoleDefinitionsOperations operations
27-
:vartype role_definitions: azure.keyvault.v7_5.operations.RoleDefinitionsOperations
2829
:ivar role_assignments: RoleAssignmentsOperations operations
29-
:vartype role_assignments: azure.keyvault.v7_5.operations.RoleAssignmentsOperations
30-
:keyword api_version: Api Version. Default value is "7.5". Note that overriding this default
31-
value may result in unsupported behavior.
30+
:vartype role_assignments: azure.keyvault.administration._generated.operations.RoleAssignmentsOperations
31+
:ivar role_definitions: RoleDefinitionsOperations operations
32+
:vartype role_definitions: azure.keyvault.administration._generated.operations.RoleDefinitionsOperations
33+
:param vault_base_url: Required.
34+
:type vault_base_url: str
35+
:param credential: Credential used to authenticate requests to the service. Required.
36+
:type credential: ~azure.core.credentials.TokenCredential
37+
:keyword api_version: The API version to use for this operation. Default value is
38+
"7.6-preview.2". Note that overriding this default value may result in unsupported behavior.
3239
:paramtype api_version: str
3340
:keyword int polling_interval: Default waiting time between two polls for LRO operations if no
3441
Retry-After header is present.
3542
"""
3643

37-
def __init__(self, **kwargs: Any) -> None: # pylint: disable=missing-client-constructor-parameter-credential
44+
def __init__(self, vault_base_url: str, credential: "TokenCredential", **kwargs: Any) -> None:
3845
_endpoint = "{vaultBaseUrl}"
39-
self._config = KeyVaultClientConfiguration(**kwargs)
46+
self._config = KeyVaultClientConfiguration(vault_base_url=vault_base_url, credential=credential, **kwargs)
4047
_policies = kwargs.pop("policies", None)
4148
if _policies is None:
4249
_policies = [
@@ -56,15 +63,13 @@ def __init__(self, **kwargs: Any) -> None: # pylint: disable=missing-client-con
5663
]
5764
self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs)
5865

59-
client_models = {k: v for k, v in _models._models.__dict__.items() if isinstance(v, type)}
60-
client_models.update({k: v for k, v in _models.__dict__.items() if isinstance(v, type)})
61-
self._serialize = Serializer(client_models)
62-
self._deserialize = Deserializer(client_models)
66+
self._serialize = Serializer()
67+
self._deserialize = Deserializer()
6368
self._serialize.client_side_validation = False
64-
self.role_definitions = RoleDefinitionsOperations(
69+
self.role_assignments = RoleAssignmentsOperations(
6570
self._client, self._config, self._serialize, self._deserialize
6671
)
67-
self.role_assignments = RoleAssignmentsOperations(
72+
self.role_definitions = RoleDefinitionsOperations(
6873
self._client, self._config, self._serialize, self._deserialize
6974
)
7075

@@ -87,13 +92,19 @@ def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs:
8792
"""
8893

8994
request_copy = deepcopy(request)
90-
request_copy.url = self._client.format_url(request_copy.url)
95+
path_format_arguments = {
96+
"vaultBaseUrl": self._serialize.url(
97+
"self._config.vault_base_url", self._config.vault_base_url, "str", skip_quote=True
98+
),
99+
}
100+
101+
request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments)
91102
return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore
92103

93104
def close(self) -> None:
94105
self._client.close()
95106

96-
def __enter__(self) -> "KeyVaultClient":
107+
def __enter__(self) -> Self:
97108
self._client.__enter__()
98109
return self
99110

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

+27-8
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-administration/{}".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)