【问题标题】:Azure ratecard api filter by currency exampleAzure ratecard api filter by currency example
【发布时间】:2019-03-26 14:01:04
【问题描述】:

我想根据资源的使用情况获取资源的价格,为此,我正在尝试azure ratecard API。我正在使用 Azure 提供的 python SDK,这里是 azure ratecard API 的链接https://docs.microsoft.com/en-us/python/api/azure-mgmt-commerce/azure.mgmt.commerce.operations.ratecardoperations?view=azure-python

问题是,我们需要将过滤器作为参数传递,但我不知道如何在过滤器中传递值。我知道我们可以使用商品 ID、货币、语言环境、地区作为过滤器,但是如何在 ratecard api 中使用它们?

这是我正在尝试的

from azure.mgmt.commerce import UsageManagementClient

ratecardclient = UsageManagementClient(credentials, subscription_id)
ratecard = ratecardclient.rate_card.get(filter=???)

我在过滤器中尝试了什么

ratecard = ratecardclient.rate_card.get("OfferDurableId eq 'MS-AZR-0003P' and Currency eq 'INR' and Locale eq 'en-US' and RegionInfo eq 'US'")

ratecard = ratecardclient.rate_card.get(filter="OfferDurableId eq 'MS-AZR-0003P' and Currency eq 'INR' and Locale eq 'en-US' and RegionInfo eq 'US'")

我从上述过滤器中得到的错误

Traceback (most recent call last):
  File "C:/Users/gsc/PycharmProjects/GsGit_Azure_cot/Azure/ADALAuth.py", line 375, in <module>
    ratecard = ratecardclient.rate_card.get("OfferDurableId eq 'MS-AZR-0003P' and Currency eq 'INR' and Locale eq 'en-US' and RegionInfo eq 'US'")
  File "C:\Users\gsc-30310\PycharmProjects\env_python3.6.8_v1\lib\site-packages\azure\mgmt\commerce\operations\rate_card_operations.py", line 94, in get
    raise models.ErrorResponseException(self._deserialize, response)
azure.mgmt.commerce.models.error_response.ErrorResponseException: Operation returned an invalid status code 'Bad Request'

【问题讨论】:

    标签: python python-3.x azure


    【解决方案1】:

    我没有尝试过,但查看文档和source code,我相信您需要指定 OData 过滤器字符串。请尝试过滤字符串:

    OfferDurableId eq '{OfferDurableId}' and Currency eq '{Currency}' and Locale eq '{Locale}' and RegionInfo eq '{RegionInfo}'
    

    所以你的代码是:

    from azure.mgmt.commerce import UsageManagementClient
    
    ratecardclient = UsageManagementClient(credentials, subscription_id)
    ratecard = ratecardclient.rate_card.get(filter="OfferDurableId eq 'MS-AZR-0003p' and Currency eq 'INR' and Locale eq 'en-US' and RegionInfo eq 'US'")  
    

    【讨论】:

    • 嗨,我试过ratecard = ratecardclient.rate_card.get(filter="OfferDurableId eq 0003P and Currency eq INR and Locale eq Central US and RegionInfo eq US") ,但我收到Operation returned an invalid status code 'Bad Request'
    • 请尝试OfferDurableId eq 'MS-AZR-0003p' and Currency eq 'INR' and Locale eq 'en-US' and RegionInfo eq 'US'。有关详细信息,请参见此处:docs.microsoft.com/en-us/previous-versions/azure/reference/…
    • 嗨,我已经尝试过ratecard = ratecardclient.rate_card.get(filter="OfferDurableId eq 'MS-AZR-0003P' and Currency eq 'INR' and Locale eq 'en-US' and RegionInfo eq 'US'") ,但我仍然得到相同的bad request error
    • 您好,感谢您的支持,代码正在运行。我想念理解的`RegionInfo, it is the region where you bought you subscription, so for me, it is IN`印度,但我把`RegionInfo`的值设置为'US',因为我认为它与locale有关。
    【解决方案2】:

    来自单元:

        # OfferDurableID: https://azure.microsoft.com/en-us/support/legal/offer-details/
        rate = self.commerce_client.rate_card.get(
            "OfferDurableId eq 'MS-AZR-0062P' and Currency eq 'USD' and Locale eq 'en-US' and RegionInfo eq 'US'"
        )
    

    https://github.com/Azure/azure-sdk-for-python/blob/master/azure-mgmt-commerce/tests/test_mgmt_commerce.py

    【讨论】:

    • 嗨,我正在使用即用即付订阅,所以我的 OfferDurableId 是“MS-AZR-0003P”。我试过ratecard = ratecardclient.rate_card.get("OfferDurableId eq 'MS-AZR-0003P' and Currency eq 'INR' and Locale eq 'en-US' and RegionInfo eq 'US'") ,但得到azure.mgmt.commerce.models.error_response.ErrorResponseException: Operation returned an invalid status code 'Bad Request'
    • 嗨,感谢您的回答。此代码也有效,我使用RegionInfo value 'US' 因为我认为它结束了 'locale, but it is 'IN' in my case because my subscription is bought in India` 的 2 位数代码。
    猜你喜欢
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 2022-12-19
    相关资源
    最近更新 更多