Skip to content

Commit 9cb1695

Browse files
authored
Demonstrate closing async credentials in Key Vault docs (#16793)
1 parent 691eac3 commit 9cb1695

File tree

8 files changed

+54
-22
lines changed

8 files changed

+54
-22
lines changed

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,8 @@ See
266266
[azure-core documentation](https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/CLIENT_LIBRARY_DEVELOPER.md#transport)
267267
for more information.
268268

269-
Async clients should be closed when they're no longer needed. Each async
270-
client is an async context manager and defines an async `close` method. For
269+
Async clients and credentials should be closed when they're no longer needed. These
270+
objects are async context managers and define async `close` methods. For
271271
example:
272272

273273
```py
@@ -276,15 +276,17 @@ from azure.keyvault.certificates.aio import CertificateClient
276276

277277
credential = DefaultAzureCredential()
278278

279-
# call close when the client is no longer needed
279+
# call close when the client and credential are no longer needed
280280
client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
281281
...
282282
await client.close()
283+
await credential.close()
283284

284-
# alternatively, use the client as an async context manager
285+
# alternatively, use them as async context managers (contextlib.AsyncExitStack can help)
285286
client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
286287
async with client:
287-
...
288+
async with credential:
289+
...
288290
```
289291

290292
### Asynchronously create a Certificate

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from azure.keyvault.certificates import CertificatePolicy, CertificateContentType, WellKnownIssuerNames
99
from azure.keyvault.certificates.aio import CertificateClient
1010
from devtools_testutils import ResourceGroupPreparer, KeyVaultPreparer
11+
import pytest
1112

1213
from _shared.preparer_async import KeyVaultClientPreparer as _KeyVaultClientPreparer
1314
from _shared.test_case_async import KeyVaultTestCase
@@ -20,7 +21,8 @@ def print(*args):
2021
assert all(arg is not None for arg in args)
2122

2223

23-
def test_create_certificate():
24+
@pytest.mark.asyncio
25+
async def test_create_certificate():
2426
vault_url = "vault_url"
2527
# pylint:disable=unused-variable
2628
# [START create_certificate_client]
@@ -30,6 +32,11 @@ def test_create_certificate():
3032
# Create a KeyVaultCertificate using default Azure credentials
3133
credential = DefaultAzureCredential()
3234
certificate_client = CertificateClient(vault_url=vault_url, credential=credential)
35+
36+
# the client and credential should be closed when no longer needed
37+
# (both are also async context managers)
38+
await certificate_client.close()
39+
await credential.close()
3340
# [END create_certificate_client]
3441

3542

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,8 @@ See
281281
[azure-core documentation](https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/CLIENT_LIBRARY_DEVELOPER.md#transport)
282282
for more information.
283283

284-
Async clients should be closed when they're no longer needed. Each async
285-
client is an async context manager and defines an async `close` method. For
284+
Async clients and credentials should be closed when they're no longer needed. These
285+
objects are async context managers and define async `close` methods. For
286286
example:
287287

288288
```py
@@ -291,15 +291,17 @@ from azure.keyvault.keys.aio import KeyClient
291291

292292
credential = DefaultAzureCredential()
293293

294-
# call close when the client is no longer needed
294+
# call close when the client and credential are no longer needed
295295
client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
296296
...
297297
await client.close()
298+
await credential.close()
298299

299-
# alternatively, use the client as an async context manager
300+
# alternatively, use them as async context managers (contextlib.AsyncExitStack can help)
300301
client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
301302
async with client:
302-
...
303+
async with credential:
304+
...
303305
```
304306

305307
### Asynchronously create a Key

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ async def test_encrypt_decrypt_async(self, azure_keyvault_url, **kwargs):
5151
# or a key's id, which must include a version
5252
key_id = "https://<your vault>.vault.azure.net/keys/<key name>/fe4fdcab688c479a9aa80f01ffeac26"
5353
crypto_client = CryptographyClient(key_id, credential)
54+
55+
# the client and credential should be closed when no longer needed
56+
# (both are also async context managers)
57+
await crypto_client.close()
58+
await credential.close()
5459
# [END create_client]
5560

5661
client = CryptographyClient(key, credential)

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from azure.keyvault.keys.aio import KeyClient
1010
from azure.keyvault.keys._shared import HttpChallengeCache
1111
from devtools_testutils import PowerShellPreparer
12+
import pytest
1213

1314
from _shared.test_case_async import KeyVaultTestCase
1415

@@ -24,7 +25,8 @@ def print(*args):
2425
assert all(arg is not None for arg in args)
2526

2627

27-
def test_create_key_client():
28+
@pytest.mark.asyncio
29+
async def test_create_key_client():
2830
vault_url = "vault_url"
2931
# pylint:disable=unused-variable
3032
# [START create_key_client]
@@ -34,6 +36,11 @@ def test_create_key_client():
3436
# Create a KeyClient using default Azure credentials
3537
credential = DefaultAzureCredential()
3638
key_client = KeyClient(vault_url, credential)
39+
40+
# the client and credential should be closed when no longer needed
41+
# (both are also async context managers)
42+
await key_client.close()
43+
await credential.close()
3744
# [END create_key_client]
3845

3946

sdk/keyvault/azure-keyvault-secrets/README.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -263,8 +263,8 @@ See
263263
[azure-core documentation](https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/CLIENT_LIBRARY_DEVELOPER.md#transport)
264264
for more information.
265265

266-
Async clients should be closed when they're no longer needed. Each async
267-
client is an async context manager and defines an async `close` method. For
266+
Async clients and credentials should be closed when they're no longer needed. These
267+
objects are async context managers and define async `close` methods. For
268268
example:
269269

270270
```py
@@ -273,15 +273,17 @@ from azure.keyvault.secrets.aio import SecretClient
273273

274274
credential = DefaultAzureCredential()
275275

276-
# call close when the client is no longer needed
276+
# call close when the client and credential are no longer needed
277277
client = SecretClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
278278
...
279279
await client.close()
280+
await credential.close()
280281

281-
# alternatively, use the client as an async context manager
282+
# alternatively, use them as async context managers (contextlib.AsyncExitStack can help)
282283
client = SecretClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
283284
async with client:
284-
...
285+
async with credential:
286+
...
285287
```
286288

287289
### Asynchronously create a secret

sdk/keyvault/azure-keyvault-secrets/tests/test_samples_secrets.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ def test_create_secret_client():
2828
from azure.keyvault.secrets import SecretClient
2929

3030
# Create a SecretClient using default Azure credentials
31-
credentials = DefaultAzureCredential()
32-
secret_client = SecretClient(vault_url, credentials)
31+
credential = DefaultAzureCredential()
32+
secret_client = SecretClient(vault_url, credential)
3333
# [END create_secret_client]
3434

3535

sdk/keyvault/azure-keyvault-secrets/tests/test_samples_secrets_async.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from azure.keyvault.secrets.aio import SecretClient
99
from devtools_testutils import ResourceGroupPreparer, KeyVaultPreparer
10+
import pytest
1011

1112
from _shared.preparer_async import KeyVaultClientPreparer as _KeyVaultClientPreparer
1213
from _shared.test_case_async import KeyVaultTestCase
@@ -20,16 +21,22 @@ def print(*args):
2021
assert all(arg is not None for arg in args)
2122

2223

23-
def test_create_secret_client():
24+
@pytest.mark.asyncio
25+
async def test_create_secret_client():
2426
vault_url = "vault_url"
2527
# pylint:disable=unused-variable
2628
# [START create_secret_client]
2729
from azure.identity.aio import DefaultAzureCredential
2830
from azure.keyvault.secrets.aio import SecretClient
2931

3032
# Create a SecretClient using default Azure credentials
31-
credentials = DefaultAzureCredential()
32-
secret_client = SecretClient(vault_url, credentials)
33+
credential = DefaultAzureCredential()
34+
secret_client = SecretClient(vault_url, credential)
35+
36+
# the client and credential should be closed when no longer needed
37+
# (both are also async context managers)
38+
await secret_client.close()
39+
await credential.close()
3340
# [END create_secret_client]
3441

3542

0 commit comments

Comments
 (0)