Skip to content

Commit 440274e

Browse files
mccoypchlowell
andauthored
[Key Vault] Align certificates with other languages (Azure#18767)
Co-authored-by: Charles Lowell <chlowe@microsoft.com>
1 parent 2d2c064 commit 440274e

File tree

7 files changed

+60
-52
lines changed

7 files changed

+60
-52
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
- Updated msrest requirement to >=0.6.21
77

88
### Added
9-
- Added method `parse_key_vault_certificate_id` that parses out a full ID returned by Key Vault, so users can easily
10-
access the certificate's `name`, `vault_url`, and `version`.
9+
- Added class `KeyVaultCertificateIdentifier` that parses out a full ID returned by Key Vault,
10+
so users can easily access the certificate's `name`, `vault_url`, and `version`.
1111

1212

1313
## 4.2.1 (2020-09-08)

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,10 @@
2222
DeletedCertificate,
2323
IssuerProperties,
2424
LifetimeAction,
25-
KeyVaultCertificate
25+
KeyVaultCertificate,
26+
KeyVaultCertificateIdentifier
2627
)
27-
from ._parse_id import parse_key_vault_certificate_id
2828
from ._shared.client_base import ApiVersion
29-
from ._shared import KeyVaultResourceId
3029

3130
__all__ = [
3231
"ApiVersion",
@@ -44,14 +43,13 @@
4443
"KeyCurveName",
4544
"KeyType",
4645
"KeyVaultCertificate",
46+
"KeyVaultCertificateIdentifier",
4747
"KeyUsageType",
4848
"LifetimeAction",
4949
"CertificateContentType",
5050
"WellKnownIssuerNames",
5151
"CertificateIssuer",
52-
"IssuerProperties",
53-
"parse_key_vault_certificate_id",
54-
"KeyVaultResourceId"
52+
"IssuerProperties"
5553
]
5654

5755
from ._version import VERSION

sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_models.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ def __init__(self, **kwargs):
147147
# type: (**Any) -> None
148148
self._attributes = kwargs.pop("attributes", None)
149149
self._id = kwargs.pop("cert_id", None)
150-
self._vault_id = parse_key_vault_id(self._id)
150+
self._vault_id = KeyVaultCertificateIdentifier(self._id)
151151
self._x509_thumbprint = kwargs.pop("x509_thumbprint", None)
152152
self._tags = kwargs.pop("tags", None)
153153

@@ -392,6 +392,45 @@ def cer(self):
392392
return self._cer
393393

394394

395+
class KeyVaultCertificateIdentifier(object):
396+
"""Information about a KeyVaultCertificate parsed from a certificate ID.
397+
398+
:param str id: the full original identifier of a certificate
399+
:raises ValueError: if the certificate ID is improperly formatted
400+
Example:
401+
.. literalinclude:: ../tests/test_parse_id.py
402+
:start-after: [START parse_key_vault_certificate_id]
403+
:end-before: [END parse_key_vault_certificate_id]
404+
:language: python
405+
:caption: Parse a certificate's ID
406+
:dedent: 8
407+
"""
408+
409+
def __init__(self, id): # pylint: disable=W0622
410+
# type: (str) -> None
411+
self._resource_id = parse_key_vault_id(id)
412+
413+
@property
414+
def source_id(self):
415+
# type: () -> str
416+
return self._resource_id.source_id
417+
418+
@property
419+
def vault_url(self):
420+
# type: () -> str
421+
return self._resource_id.vault_url
422+
423+
@property
424+
def name(self):
425+
# type: () -> str
426+
return self._resource_id.name
427+
428+
@property
429+
def version(self):
430+
# type: () -> Optional[str]
431+
return self._resource_id.version
432+
433+
395434
class CertificateOperation(object):
396435
# pylint:disable=too-many-instance-attributes
397436
"""A certificate operation is returned in case of long running requests.

sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_parse_id.py

Lines changed: 0 additions & 29 deletions
This file was deleted.

sdk/keyvault/azure-keyvault-certificates/tests/test_certificates_client.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
KeyType,
2121
KeyCurveName,
2222
KeyUsageType,
23+
KeyVaultCertificateIdentifier,
2324
CertificateContentType,
2425
LifetimeAction,
2526
CertificateIssuer,
26-
IssuerProperties,
27-
parse_key_vault_certificate_id
27+
IssuerProperties
2828
)
2929
import pytest
3030

@@ -88,7 +88,7 @@ def _validate_certificate_operation(self, pending_cert_operation, vault, cert_na
8888
self.assertIsNotNone(pending_cert_operation)
8989
self.assertIsNotNone(pending_cert_operation.csr)
9090
self.assertEqual(original_cert_policy.issuer_name, pending_cert_operation.issuer_name)
91-
pending_id = parse_key_vault_certificate_id(pending_cert_operation.id)
91+
pending_id = KeyVaultCertificateIdentifier(pending_cert_operation.id)
9292
self.assertEqual(pending_id.vault_url.strip("/"), vault.strip("/"))
9393
self.assertEqual(pending_id.name, cert_name)
9494

@@ -349,7 +349,7 @@ def test_recover_and_purge(self, client, **kwargs):
349349
client.begin_delete_certificate(certificate_name=cert_name).wait()
350350

351351
# validate all our deleted certificates are returned by list_deleted_certificates
352-
deleted = [parse_key_vault_certificate_id(source_id=c.id).name for c in client.list_deleted_certificates()]
352+
deleted = [KeyVaultCertificateIdentifier(id=c.id).name for c in client.list_deleted_certificates()]
353353
self.assertTrue(all(c in deleted for c in certs.keys()))
354354

355355
# recover select certificates (test resources have a "livekvtest" prefix)
@@ -364,7 +364,7 @@ def test_recover_and_purge(self, client, **kwargs):
364364
time.sleep(50)
365365

366366
# validate none of our deleted certificates are returned by list_deleted_certificates
367-
deleted = [parse_key_vault_certificate_id(source_id=c.id).name for c in client.list_deleted_certificates()]
367+
deleted = [KeyVaultCertificateIdentifier(id=c.id).name for c in client.list_deleted_certificates()]
368368
self.assertTrue(not any(c in deleted for c in certs.keys()))
369369

370370
# validate the recovered certificates

sdk/keyvault/azure-keyvault-certificates/tests/test_certificates_client_async.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
KeyType,
2020
KeyCurveName,
2121
KeyUsageType,
22+
KeyVaultCertificateIdentifier,
2223
CertificateContentType,
2324
LifetimeAction,
2425
CertificateIssuer,
25-
IssuerProperties,
26-
parse_key_vault_certificate_id
26+
IssuerProperties
2727
)
2828
from azure.keyvault.certificates.aio import CertificateClient
2929
import pytest
@@ -84,7 +84,7 @@ def _validate_certificate_operation(self, pending_cert_operation, vault, cert_na
8484
self.assertIsNotNone(pending_cert_operation)
8585
self.assertIsNotNone(pending_cert_operation.csr)
8686
self.assertEqual(original_cert_policy.issuer_name, pending_cert_operation.issuer_name)
87-
pending_id = parse_key_vault_certificate_id(pending_cert_operation.id)
87+
pending_id = KeyVaultCertificateIdentifier(pending_cert_operation.id)
8888
self.assertEqual(pending_id.vault_url.strip("/"), vault.strip("/"))
8989
self.assertEqual(pending_id.name, cert_name)
9090

@@ -350,7 +350,7 @@ async def test_recover_and_purge(self, client, **kwargs):
350350
deleted_certificates = client.list_deleted_certificates()
351351
deleted = []
352352
async for c in deleted_certificates:
353-
deleted.append(parse_key_vault_certificate_id(source_id=c.id).name)
353+
deleted.append(KeyVaultCertificateIdentifier(id=c.id).name)
354354
self.assertTrue(all(c in deleted for c in certs.keys()))
355355

356356
# recover select certificates (test resources have a "livekvtest" prefix)
@@ -368,7 +368,7 @@ async def test_recover_and_purge(self, client, **kwargs):
368368
deleted_certificates = client.list_deleted_certificates()
369369
deleted = []
370370
async for c in deleted_certificates:
371-
deleted.append(parse_key_vault_certificate_id(source_id=c.id).name)
371+
deleted.append(KeyVaultCertificateIdentifier(id=c.id).name)
372372
self.assertTrue(not any(c in deleted for c in certs.keys()))
373373

374374
# validate the recovered certificates

sdk/keyvault/azure-keyvault-certificates/tests/test_parse_id.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Copyright (c) Microsoft Corporation.
33
# Licensed under the MIT License.
44
# -------------------------------------
5-
from azure.keyvault.certificates import CertificateClient, CertificatePolicy, parse_key_vault_certificate_id
5+
from azure.keyvault.certificates import CertificateClient, CertificatePolicy, KeyVaultCertificateIdentifier
66
from devtools_testutils import PowerShellPreparer
77

88
from _shared.test_case import KeyVaultTestCase
@@ -25,7 +25,7 @@ def test_parse_certificate_id_with_version(self, azure_keyvault_url):
2525

2626
# [START parse_key_vault_certificate_id]
2727
cert = client.get_certificate(cert_name)
28-
parsed_certificate_id = parse_key_vault_certificate_id(cert.id)
28+
parsed_certificate_id = KeyVaultCertificateIdentifier(cert.id)
2929

3030
print(parsed_certificate_id.name)
3131
print(parsed_certificate_id.vault_url)
@@ -40,7 +40,7 @@ def test_parse_certificate_id_with_version(self, azure_keyvault_url):
4040

4141
def test_parse_certificate_id_with_pending_version():
4242
source_id = "https://keyvault-name.vault.azure.net/certificates/certificate-name/pending"
43-
parsed_certificate_id = parse_key_vault_certificate_id(source_id)
43+
parsed_certificate_id = KeyVaultCertificateIdentifier(source_id)
4444

4545
assert parsed_certificate_id.name == "certificate-name"
4646
assert parsed_certificate_id.vault_url == "https://keyvault-name.vault.azure.net"
@@ -52,7 +52,7 @@ def test_parse_certificate_id_with_pending_version():
5252

5353
def test_parse_deleted_certificate_id():
5454
source_id = "https://keyvault-name.vault.azure.net/deletedcertificates/deleted-certificate"
55-
parsed_certificate_id = parse_key_vault_certificate_id(source_id)
55+
parsed_certificate_id = KeyVaultCertificateIdentifier(source_id)
5656

5757
assert parsed_certificate_id.name == "deleted-certificate"
5858
assert parsed_certificate_id.vault_url == "https://keyvault-name.vault.azure.net"

0 commit comments

Comments
 (0)