Skip to content

Commit 28bb627

Browse files
authored
[Key Vault] Handle missing inner certificate operation error (#41965)
* Handle missing inner certificate operation error * Use public attributes in test
1 parent 86d9bd5 commit 28bb627

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010

1111
- When creating a certificate with an unknown issuer, `CertificateClient.(begin_)create_certificate` now returns a
1212
`CertificateOperation` instead of `None`
13+
- When a certificate operation's error doesn't have an inner error, `CertificateOperationError` will be correctly
14+
serialized instead of raising an exception
15+
([Azure/azure-cli #31764](https://github.com/Azure/azure-cli/issues/31764))
1316

1417
### Other Changes
1518

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ class CertificateOperationError(object):
8686
:param str code: The error code.
8787
:param str message: The error message.
8888
:param inner_error: The error object itself
89-
:type inner_error: ~azure.keyvault.certificates.CertificateOperationError
89+
:type inner_error: ~azure.keyvault.certificates.CertificateOperationError or None
9090
"""
9191

92-
def __init__(self, code: str, message: str, inner_error: "CertificateOperationError") -> None:
92+
def __init__(self, code: str, message: str, inner_error: "Optional[CertificateOperationError]") -> None:
9393
self._code = code
9494
self._message = message
9595
self._inner_error = inner_error
@@ -102,7 +102,7 @@ def _from_error_bundle(cls, error_bundle: models.KeyVaultErrorError) -> "Certifi
102102
return cls(
103103
code=error_bundle.code, # type: ignore
104104
message=error_bundle.message, # type: ignore
105-
inner_error=cls._from_error_bundle(error_bundle.inner_error), # type: ignore
105+
inner_error=cls._from_error_bundle(error_bundle.inner_error) if error_bundle.inner_error else None,
106106
)
107107

108108
@property
@@ -124,11 +124,11 @@ def message(self) -> str:
124124
return self._message
125125

126126
@property
127-
def inner_error(self) -> "CertificateOperationError":
127+
def inner_error(self) -> "Optional[CertificateOperationError]":
128128
"""The error itself.
129129
130130
:returns: The error itself.
131-
:rtype: ~azure.keyvault.certificates.CertificateOperationError
131+
:rtype: ~azure.keyvault.certificates.CertificateOperationError or None
132132
"""
133133
return self._inner_error
134134

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
WellKnownIssuerNames,
3232
)
3333
from azure.keyvault.certificates._client import NO_SAN_OR_SUBJECT
34+
from azure.keyvault.certificates._generated.models import (
35+
CertificateOperation as _CertificateOperation,
36+
KeyVaultErrorError,
37+
)
3438
from azure.keyvault.certificates._shared.client_base import DEFAULT_VERSION
3539
import pytest
3640

@@ -834,3 +838,14 @@ def test_thumbprint_hex():
834838
x509_thumbprint=b"v\xe1\x81\x9f\xad\xf0jU\xefK\x12j.\xf7C\xc2\xba\xe8\xa1Q",
835839
)
836840
assert "76E1819FADF06A55EF4B126A2EF743C2BAE8A151" in str(properties)
841+
842+
843+
def test_certificate_operation_empty_inner_error():
844+
"""Ensure a CertificateOperation can be serialized when the generated model has no inner error.
845+
See https://github.com/Azure/azure-cli/issues/31764.
846+
"""
847+
error = KeyVaultErrorError(code="500", message="Bad Request", inner_error=None)
848+
generated_operation = _CertificateOperation(error=error)
849+
operation = CertificateOperation._from_certificate_operation_bundle(generated_operation)
850+
assert operation.error
851+
assert operation.error.inner_error is None

0 commit comments

Comments
 (0)