Swagger-codegen: [python]我们如何利用重试机制处理通过sdk发出的请求。

创建于 2017-09-15  ·  3评论  ·  资料来源: swagger-api/swagger-codegen

描述

使用python sdk我们如何在poolmanager对象中传递重试参数/参数? 假设由于某种原因,如果请求的时间比正常时间更长,那么我们想传递一个重试编号,是否可以利用urllib3支持的重试类? 感谢你的帮助。

Swagger-Codegen版本

2.2.3

昂首阔步的声明文件内容或网址
Python Question

最有用的评论

@ dnome2您可以通过ApiClient.rest_client.pool_manager访问PoolManager。 如果要将更改应用到每个客户端,则需要直接创建ApiClient ,并确保在创建新的客户端对象时将其传递。

以宠物店为例:

  • 在创建PetApi类的新客户端时,它将创建自己的ApiClient实例,除非您通过api_client kw传递自己的实例(作为PetApi.api_client
  • ApiClient创建自己的RESTClientObject (作为ApiClient.rest_client
  • RESTClientObject创建自己的urllib3.PoolManager (作为RESTClientObject.pool_manager

因此,这就是为什么您需要将所有新客户端设置为使用该特定ApiClient实例的原因-如果不这样做,它们将使用默认设置创建自己的客户端。 我想如果您希望不同的API具有不同的PoolManager设置或其他功能,那可能会很有用。

这是如何设置并确保将其应用于所有宠物商店的API客户端的示例:

import swagger_client

api_client = swagger_client.ApiClient()
api_client.rest_client.pool_manager.connection_pool_kw['retries'] = 10
pet_api = swagger_client.PetApi(api_client=api_client)
user_api = swagger_client.UserApi(api_client=api_client)
store_api = swagger_client.StoreApi(api_client=api_client)

我刚刚在离线状态下对其进行了测试,并验证了urllib3进行了10次尝试,而默认值为3次

Sidenote / tangent :如果每次都很烦人,并且您不介意直接编辑生成的swagger_client库,则可以通过让ApiClient自己实例化客户端并传递self将其设置为默认行为ApiClient.__init__ ,您可以执行以下操作:

from .apis import PetApi
self.pet_api = PetApi(api_client=self)

这样,您只需要创建ApiClient并更新一次池管理器设置,就可以像api_client.pet_api.find_pets_by_status('foo')这样通过它访问其他客户端,以后您通过ApiClient进行的任何更改都将反映在其中。分配给它的所有客户。 如果要创建多个客户端,则还不必为每个客户端重新设置客户端

所有3条评论

抄送@taxpon @frol @mbohlool

@ dnome2您可以通过ApiClient.rest_client.pool_manager访问PoolManager。 如果要将更改应用到每个客户端,则需要直接创建ApiClient ,并确保在创建新的客户端对象时将其传递。

以宠物店为例:

  • 在创建PetApi类的新客户端时,它将创建自己的ApiClient实例,除非您通过api_client kw传递自己的实例(作为PetApi.api_client
  • ApiClient创建自己的RESTClientObject (作为ApiClient.rest_client
  • RESTClientObject创建自己的urllib3.PoolManager (作为RESTClientObject.pool_manager

因此,这就是为什么您需要将所有新客户端设置为使用该特定ApiClient实例的原因-如果不这样做,它们将使用默认设置创建自己的客户端。 我想如果您希望不同的API具有不同的PoolManager设置或其他功能,那可能会很有用。

这是如何设置并确保将其应用于所有宠物商店的API客户端的示例:

import swagger_client

api_client = swagger_client.ApiClient()
api_client.rest_client.pool_manager.connection_pool_kw['retries'] = 10
pet_api = swagger_client.PetApi(api_client=api_client)
user_api = swagger_client.UserApi(api_client=api_client)
store_api = swagger_client.StoreApi(api_client=api_client)

我刚刚在离线状态下对其进行了测试,并验证了urllib3进行了10次尝试,而默认值为3次

Sidenote / tangent :如果每次都很烦人,并且您不介意直接编辑生成的swagger_client库,则可以通过让ApiClient自己实例化客户端并传递self将其设置为默认行为ApiClient.__init__ ,您可以执行以下操作:

from .apis import PetApi
self.pet_api = PetApi(api_client=self)

这样,您只需要创建ApiClient并更新一次池管理器设置,就可以像api_client.pet_api.find_pets_by_status('foo')这样通过它访问其他客户端,以后您通过ApiClient进行的任何更改都将反映在其中。分配给它的所有客户。 如果要创建多个客户端,则还不必为每个客户端重新设置客户端

感谢一吨@arcward ! 将尝试一下,让我知道是否有任何问题。

此页面是否有帮助?
0 / 5 - 0 等级