Skip to content

Commit

Permalink
Correct import_key parameter type (#7590)
Browse files Browse the repository at this point in the history
  • Loading branch information
chlowell authored Oct 4, 2019
1 parent d2b712d commit 3949287
Show file tree
Hide file tree
Showing 9 changed files with 39 additions and 35 deletions.
6 changes: 6 additions & 0 deletions sdk/keyvault/azure-keyvault-keys/HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
# Release History

## 4.0.0b4
### Breaking changes:
- Enums 'JsonWebKeyCurveName', 'JsonWebKeyOperation', and 'JsonWebKeyType' have
been renamed to 'KeyCurveName', 'KeyOperation', and 'KeyType', respectively.

### Fixes and improvements:
- The `key` argument to `import_key` should be an instance of `azure.keyvault.keys.JsonWebKey`
([#7590](https://github.com/Azure/azure-sdk-for-python/pull/7590))


## 4.0.0b3 (2019-09-11)
### Breaking changes:
- `CryptographyClient` methods `wrap` and `unwrap` are renamed `wrap_key` and
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
# -------------------------------------
from .client import KeyClient
from .enums import KeyCurveName, KeyOperation, KeyType
from .models import JsonWebKey

__all__ = ["KeyCurveName", "KeyOperation", "KeyType", "KeyClient"]
__all__ = ["JsonWebKey", "KeyCurveName", "KeyOperation", "KeyType", "KeyClient"]
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,6 @@ async def import_key(
else:
attributes = None
bundle = await self._client.import_key(
self.vault_url, name, key=key, hsm=hsm, key_attributes=attributes, tags=tags, **kwargs
self.vault_url, name, key=key._to_generated_model(), hsm=hsm, key_attributes=attributes, tags=tags, **kwargs
)
return Key._from_key_bundle(bundle)
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from typing import Any, Dict, List, Optional, Union
from datetime import datetime
from azure.core.paging import ItemPaged
from .models import JsonWebKey


class KeyClient(KeyVaultClientBase):
Expand Down Expand Up @@ -530,7 +531,7 @@ def restore_key(self, backup, **kwargs):
def import_key(
self,
name, # type: str
key, # type: List[str]
key, # type: JsonWebKey
hsm=None, # type: Optional[bool]
enabled=None, # type: Optional[bool]
not_before=None, # type: Optional[datetime]
Expand Down Expand Up @@ -560,6 +561,6 @@ def import_key(
else:
attributes = None
bundle = self._client.import_key(
self.vault_url, name, key=key, hsm=hsm, key_attributes=attributes, tags=tags, **kwargs
self.vault_url, name, key=key._to_generated_model(), hsm=hsm, key_attributes=attributes, tags=tags, **kwargs
)
return Key._from_key_bundle(bundle)
44 changes: 20 additions & 24 deletions sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# -------------------------------------
from collections import namedtuple
from ._shared import parse_vault_id
from ._shared._generated.v7_0.models import JsonWebKey as _JsonWebKey

try:
from typing import TYPE_CHECKING
Expand All @@ -18,6 +19,7 @@

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


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

FIELDS = ("kid", "kty", "key_ops", "n", "e", "d", "dp", "dq", "qi", "p", "q", "k", "t", "crv", "x", "y")

def __init__(self, **kwargs):
# type: (**Any) -> None
super(JsonWebKey, self).__init__(**kwargs)
self.kid = kwargs.get("kid", None)
self.kty = kwargs.get("kty", None)
self.key_ops = kwargs.get("key_ops", None)
self.n = kwargs.get("n", None)
self.e = kwargs.get("e", None)
self.d = kwargs.get("d", None)
self.dp = kwargs.get("dp", None)
self.dq = kwargs.get("dq", None)
self.qi = kwargs.get("qi", None)
self.p = kwargs.get("p", None)
self.q = kwargs.get("q", None)
self.k = kwargs.get("k", None)
self.t = kwargs.get("t", None)
self.crv = kwargs.get("crv", None)
self.x = kwargs.get("x", None)
self.y = kwargs.get("y", None)
for field in self.FIELDS:
setattr(self, field, kwargs.get(field))

def _to_generated_model(self):
# type: () -> _JsonWebKey
jwk = _JsonWebKey()
for field in self.FIELDS:
setattr(jwk, field, getattr(self, field))
return jwk


class KeyProperties(object):
Expand Down Expand Up @@ -205,8 +201,8 @@ def _from_key_bundle(cls, key_bundle):
# type: (_models.KeyBundle) -> Key
"""Construct a Key from an autorest-generated KeyBundle"""
return cls(
properties=KeyProperties._from_key_bundle(key_bundle), #pylint: disable=protected-access
key_material=key_bundle.key
properties=KeyProperties._from_key_bundle(key_bundle), # pylint: disable=protected-access
key_material=key_bundle.key,
)

@property
Expand Down Expand Up @@ -243,7 +239,7 @@ def __init__(
key_material=None, # type: _models.JsonWebKey
deleted_date=None, # type: Optional[datetime]
recovery_id=None, # type: Optional[str]
scheduled_purge_date=None # type: Optional[datetime]
scheduled_purge_date=None, # type: Optional[datetime]
):
# type: (...) -> None
super(DeletedKey, self).__init__(properties, key_material)
Expand All @@ -256,22 +252,22 @@ def _from_deleted_key_bundle(cls, deleted_key_bundle):
# type: (_models.DeletedKeyBundle) -> DeletedKey
"""Construct a DeletedKey from an autorest-generated DeletedKeyBundle"""
return cls(
properties=KeyProperties._from_key_bundle(deleted_key_bundle), #pylint: disable=protected-access
properties=KeyProperties._from_key_bundle(deleted_key_bundle), # pylint: disable=protected-access
key_material=deleted_key_bundle.key,
deleted_date=deleted_key_bundle.deleted_date,
recovery_id=deleted_key_bundle.recovery_id,
scheduled_purge_date=deleted_key_bundle.scheduled_purge_date
scheduled_purge_date=deleted_key_bundle.scheduled_purge_date,
)

@classmethod
def _from_deleted_key_item(cls, deleted_key_item):
# type: (_models.DeletedKeyItem) -> DeletedKey
"""Construct a DeletedKey from an autorest-generated DeletedKeyItem"""
return cls(
properties=KeyProperties._from_key_item(deleted_key_item), #pylint: disable=protected-access
properties=KeyProperties._from_key_item(deleted_key_item), # pylint: disable=protected-access
deleted_date=deleted_key_item.deleted_date,
recovery_id=deleted_key_item.recovery_id,
scheduled_purge_date=deleted_key_item.scheduled_purge_date
scheduled_purge_date=deleted_key_item.scheduled_purge_date,
)

@property
Expand Down
3 changes: 1 addition & 2 deletions sdk/keyvault/azure-keyvault-keys/tests/test_crypto_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
import codecs
import hashlib

from azure.keyvault.keys import KeyCurveName
from azure.keyvault.keys import JsonWebKey, KeyCurveName
from azure.keyvault.keys.crypto import EncryptionAlgorithm, KeyWrapAlgorithm, SignatureAlgorithm
from azure.keyvault.keys._shared._generated.v7_0.models import JsonWebKey
from azure.mgmt.keyvault.models import KeyPermissions, Permissions
from devtools_testutils import ResourceGroupPreparer
from keys_preparer import VaultClientPreparer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
import codecs
import hashlib

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

async def _import_test_key(self, client, name):
def _to_bytes(hex):
Expand Down
2 changes: 1 addition & 1 deletion sdk/keyvault/azure-keyvault-keys/tests/test_key_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import time

from azure.core.exceptions import ResourceNotFoundError
from azure.keyvault.keys._shared._generated.v7_0.models import JsonWebKey
from azure.keyvault.keys.models import JsonWebKey
from keys_preparer import VaultClientPreparer
from keys_test_case import KeyVaultTestCase
from devtools_testutils import ResourceGroupPreparer
Expand Down
2 changes: 1 addition & 1 deletion sdk/keyvault/azure-keyvault-keys/tests/test_keys_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from keys_async_preparer import AsyncVaultClientPreparer
from keys_async_test_case import AsyncKeyVaultTestCase

from azure.keyvault.keys._shared._generated.v7_0.models import JsonWebKey
from azure.keyvault.keys.models import JsonWebKey

from dateutil import parser as date_parse

Expand Down

0 comments on commit 3949287

Please sign in to comment.