Skip to content

Commit be7176c

Browse files
chlowellfengzhou-msft
authored andcommitted
Correct import_key parameter type (#7590)
1 parent 17add75 commit be7176c

File tree

9 files changed

+39
-35
lines changed

9 files changed

+39
-35
lines changed

sdk/keyvault/azure-keyvault-keys/HISTORY.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
# Release History
22

33
## 4.0.0b4
4+
### Breaking changes:
45
- Enums 'JsonWebKeyCurveName', 'JsonWebKeyOperation', and 'JsonWebKeyType' have
56
been renamed to 'KeyCurveName', 'KeyOperation', and 'KeyType', respectively.
67

8+
### Fixes and improvements:
9+
- The `key` argument to `import_key` should be an instance of `azure.keyvault.keys.JsonWebKey`
10+
([#7590](https://github.com/Azure/azure-sdk-for-python/pull/7590))
11+
12+
713
## 4.0.0b3 (2019-09-11)
814
### Breaking changes:
915
- `CryptographyClient` methods `wrap` and `unwrap` are renamed `wrap_key` and

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
# -------------------------------------
55
from .client import KeyClient
66
from .enums import KeyCurveName, KeyOperation, KeyType
7+
from .models import JsonWebKey
78

8-
__all__ = ["KeyCurveName", "KeyOperation", "KeyType", "KeyClient"]
9+
__all__ = ["JsonWebKey", "KeyCurveName", "KeyOperation", "KeyType", "KeyClient"]

sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/aio/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,6 @@ async def import_key(
539539
else:
540540
attributes = None
541541
bundle = await self._client.import_key(
542-
self.vault_url, name, key=key, hsm=hsm, key_attributes=attributes, tags=tags, **kwargs
542+
self.vault_url, name, key=key._to_generated_model(), hsm=hsm, key_attributes=attributes, tags=tags, **kwargs
543543
)
544544
return Key._from_key_bundle(bundle)

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from typing import Any, Dict, List, Optional, Union
2020
from datetime import datetime
2121
from azure.core.paging import ItemPaged
22+
from .models import JsonWebKey
2223

2324

2425
class KeyClient(KeyVaultClientBase):
@@ -530,7 +531,7 @@ def restore_key(self, backup, **kwargs):
530531
def import_key(
531532
self,
532533
name, # type: str
533-
key, # type: List[str]
534+
key, # type: JsonWebKey
534535
hsm=None, # type: Optional[bool]
535536
enabled=None, # type: Optional[bool]
536537
not_before=None, # type: Optional[datetime]
@@ -560,6 +561,6 @@ def import_key(
560561
else:
561562
attributes = None
562563
bundle = self._client.import_key(
563-
self.vault_url, name, key=key, hsm=hsm, key_attributes=attributes, tags=tags, **kwargs
564+
self.vault_url, name, key=key._to_generated_model(), hsm=hsm, key_attributes=attributes, tags=tags, **kwargs
564565
)
565566
return Key._from_key_bundle(bundle)

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

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# -------------------------------------
55
from collections import namedtuple
66
from ._shared import parse_vault_id
7+
from ._shared._generated.v7_0.models import JsonWebKey as _JsonWebKey
78

89
try:
910
from typing import TYPE_CHECKING
@@ -18,6 +19,7 @@
1819

1920
KeyOperationResult = namedtuple("KeyOperationResult", ["id", "value"])
2021

22+
2123
class JsonWebKey(object):
2224
# pylint:disable=too-many-instance-attributes
2325
"""As of http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18. All parameters are optional.
@@ -43,25 +45,19 @@ class JsonWebKey(object):
4345
:param bytes y: Y component of an EC public key.
4446
"""
4547

48+
FIELDS = ("kid", "kty", "key_ops", "n", "e", "d", "dp", "dq", "qi", "p", "q", "k", "t", "crv", "x", "y")
49+
4650
def __init__(self, **kwargs):
4751
# type: (**Any) -> None
48-
super(JsonWebKey, self).__init__(**kwargs)
49-
self.kid = kwargs.get("kid", None)
50-
self.kty = kwargs.get("kty", None)
51-
self.key_ops = kwargs.get("key_ops", None)
52-
self.n = kwargs.get("n", None)
53-
self.e = kwargs.get("e", None)
54-
self.d = kwargs.get("d", None)
55-
self.dp = kwargs.get("dp", None)
56-
self.dq = kwargs.get("dq", None)
57-
self.qi = kwargs.get("qi", None)
58-
self.p = kwargs.get("p", None)
59-
self.q = kwargs.get("q", None)
60-
self.k = kwargs.get("k", None)
61-
self.t = kwargs.get("t", None)
62-
self.crv = kwargs.get("crv", None)
63-
self.x = kwargs.get("x", None)
64-
self.y = kwargs.get("y", None)
52+
for field in self.FIELDS:
53+
setattr(self, field, kwargs.get(field))
54+
55+
def _to_generated_model(self):
56+
# type: () -> _JsonWebKey
57+
jwk = _JsonWebKey()
58+
for field in self.FIELDS:
59+
setattr(jwk, field, getattr(self, field))
60+
return jwk
6561

6662

6763
class KeyProperties(object):
@@ -205,8 +201,8 @@ def _from_key_bundle(cls, key_bundle):
205201
# type: (_models.KeyBundle) -> Key
206202
"""Construct a Key from an autorest-generated KeyBundle"""
207203
return cls(
208-
properties=KeyProperties._from_key_bundle(key_bundle), #pylint: disable=protected-access
209-
key_material=key_bundle.key
204+
properties=KeyProperties._from_key_bundle(key_bundle), # pylint: disable=protected-access
205+
key_material=key_bundle.key,
210206
)
211207

212208
@property
@@ -243,7 +239,7 @@ def __init__(
243239
key_material=None, # type: _models.JsonWebKey
244240
deleted_date=None, # type: Optional[datetime]
245241
recovery_id=None, # type: Optional[str]
246-
scheduled_purge_date=None # type: Optional[datetime]
242+
scheduled_purge_date=None, # type: Optional[datetime]
247243
):
248244
# type: (...) -> None
249245
super(DeletedKey, self).__init__(properties, key_material)
@@ -256,22 +252,22 @@ def _from_deleted_key_bundle(cls, deleted_key_bundle):
256252
# type: (_models.DeletedKeyBundle) -> DeletedKey
257253
"""Construct a DeletedKey from an autorest-generated DeletedKeyBundle"""
258254
return cls(
259-
properties=KeyProperties._from_key_bundle(deleted_key_bundle), #pylint: disable=protected-access
255+
properties=KeyProperties._from_key_bundle(deleted_key_bundle), # pylint: disable=protected-access
260256
key_material=deleted_key_bundle.key,
261257
deleted_date=deleted_key_bundle.deleted_date,
262258
recovery_id=deleted_key_bundle.recovery_id,
263-
scheduled_purge_date=deleted_key_bundle.scheduled_purge_date
259+
scheduled_purge_date=deleted_key_bundle.scheduled_purge_date,
264260
)
265261

266262
@classmethod
267263
def _from_deleted_key_item(cls, deleted_key_item):
268264
# type: (_models.DeletedKeyItem) -> DeletedKey
269265
"""Construct a DeletedKey from an autorest-generated DeletedKeyItem"""
270266
return cls(
271-
properties=KeyProperties._from_key_item(deleted_key_item), #pylint: disable=protected-access
267+
properties=KeyProperties._from_key_item(deleted_key_item), # pylint: disable=protected-access
272268
deleted_date=deleted_key_item.deleted_date,
273269
recovery_id=deleted_key_item.recovery_id,
274-
scheduled_purge_date=deleted_key_item.scheduled_purge_date
270+
scheduled_purge_date=deleted_key_item.scheduled_purge_date,
275271
)
276272

277273
@property

sdk/keyvault/azure-keyvault-keys/tests/test_crypto_client.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
import codecs
66
import hashlib
77

8-
from azure.keyvault.keys import KeyCurveName
8+
from azure.keyvault.keys import JsonWebKey, KeyCurveName
99
from azure.keyvault.keys.crypto import EncryptionAlgorithm, KeyWrapAlgorithm, SignatureAlgorithm
10-
from azure.keyvault.keys._shared._generated.v7_0.models import JsonWebKey
1110
from azure.mgmt.keyvault.models import KeyPermissions, Permissions
1211
from devtools_testutils import ResourceGroupPreparer
1312
from keys_preparer import VaultClientPreparer

sdk/keyvault/azure-keyvault-keys/tests/test_crypto_client_async.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
import codecs
66
import hashlib
77

8-
from azure.keyvault.keys import KeyCurveName
8+
from azure.keyvault.keys import JsonWebKey, KeyCurveName
99
from azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm, KeyWrapAlgorithm, SignatureAlgorithm
10-
from azure.keyvault.keys._shared._generated.v7_0.models import JsonWebKey
1110
from azure.mgmt.keyvault.models import KeyPermissions, Permissions
1211
from devtools_testutils import ResourceGroupPreparer
1312
from keys_async_preparer import AsyncVaultClientPreparer
@@ -28,7 +27,9 @@ def _validate_rsa_key_bundle(self, key_attributes, vault, key_name, kty, key_ops
2827
self.assertEqual(key.kty, kty, "kty should by '{}', but is '{}'".format(key, key.kty))
2928
self.assertTrue(key.n and key.e, "Bad RSA public material.")
3029
self.assertEqual(key_ops, key.key_ops, "keyOps should be '{}', but is '{}'".format(key_ops, key.key_ops))
31-
self.assertTrue(key_attributes.properties.created and key_attributes.properties.updated, "Missing required date attributes.")
30+
self.assertTrue(
31+
key_attributes.properties.created and key_attributes.properties.updated, "Missing required date attributes."
32+
)
3233

3334
async def _import_test_key(self, client, name):
3435
def _to_bytes(hex):

sdk/keyvault/azure-keyvault-keys/tests/test_key_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import time
99

1010
from azure.core.exceptions import ResourceNotFoundError
11-
from azure.keyvault.keys._shared._generated.v7_0.models import JsonWebKey
11+
from azure.keyvault.keys.models import JsonWebKey
1212
from keys_preparer import VaultClientPreparer
1313
from keys_test_case import KeyVaultTestCase
1414
from devtools_testutils import ResourceGroupPreparer

sdk/keyvault/azure-keyvault-keys/tests/test_keys_async.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from keys_async_preparer import AsyncVaultClientPreparer
1212
from keys_async_test_case import AsyncKeyVaultTestCase
1313

14-
from azure.keyvault.keys._shared._generated.v7_0.models import JsonWebKey
14+
from azure.keyvault.keys.models import JsonWebKey
1515

1616
from dateutil import parser as date_parse
1717

0 commit comments

Comments
 (0)