Python连接Azure Confidential Ledger时如何修改API版本?
问题重现
尝试使用以下Python代码连接并查询Azure Confidential Ledger:
from azure.confidentialledger import ConfidentialLedgerClient from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient from azure.identity import DefaultAzureCredential identity_client = ConfidentialLedgerCertificateClient() network_identity = identity_client.get_ledger_identity( ledger_id="testACL" ) ledger_tls_cert_file_name = "ledger_certificate.pem" with open(ledger_tls_cert_file_name, "w") as cert_file: cert_file.write(network_identity["ledgerTlsCertificate"]) credential = DefaultAzureCredential() ledger_client = ConfidentialLedgerClient( endpoint="https://testACL.confidential-ledger.azure.com", credential=credential, ledger_certificate_path=ledger_tls_cert_file_name ) ranged_result = ledger_client.list_ledger_entries() for i, r in enumerate(ranged_result): print(i, r)
运行时出现以下错误,要求将API版本从2022-05-13改为2022-04-20-preview:
Traceback (most recent call last): File "X", line 23, in for i, r in enumerate(ranged_result):
File "C:\Users\Administrator.venv\lib\site-packages\azure\core\paging.py", line 128, in next return next(self._page_iterator)
File "C:\Users\Administrator.venv\lib\site-packages\azure\core\paging.py", line 76, in next self._response = self._get_next(self.continuation_token)
File "C:\Users\Administrator.venv\lib\site-packages\azure\confidentialledger_operations_operations.py", line 732, in get_next raise HttpResponseError(response=response)
azure.core.exceptions.HttpResponseError: (QueryParameterError) 解析的api-version 2022-05-13不可用,请使用以下版本之一:2022-04-20-preview、0.1-preview
解决方案
在初始化ConfidentialLedgerClient时,直接指定api_version参数即可切换到目标API版本。修改后的代码如下:
from azure.confidentialledger import ConfidentialLedgerClient from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient from azure.identity import DefaultAzureCredential identity_client = ConfidentialLedgerCertificateClient() network_identity = identity_client.get_ledger_identity( ledger_id="testACL" ) ledger_tls_cert_file_name = "ledger_certificate.pem" with open(ledger_tls_cert_file_name, "w") as cert_file: cert_file.write(network_identity["ledgerTlsCertificate"]) credential = DefaultAzureCredential() ledger_client = ConfidentialLedgerClient( endpoint="https://testACL.confidential-ledger.azure.com", credential=credential, ledger_certificate_path=ledger_tls_cert_file_name, api_version="2022-04-20-preview" # 指定目标API版本 ) ranged_result = ledger_client.list_ledger_entries() for i, r in enumerate(ranged_result): print(i, r)
说明
Azure Python SDK的多数客户端类都支持通过api_version参数指定API版本,当服务端不支持客户端默认使用的版本时,直接在客户端初始化时传入目标版本即可解决版本不兼容问题。
内容的提问来源于stack exchange,提问作者OmT

