Wie können wir mit python sdk den retry-Parameter / das retry-Argument im poolmanager-Objekt übergeben? Angenommen, die Anforderung dauert aus irgendeinem Grund länger als normal, und wir möchten eine Wiederholungsnummer übergeben. Können wir die von urllib3 unterstützte Wiederholungsklasse verwenden? Schätze deine Hilfe.
2.2.3
cc @taxpon @frol @mbohlool
@ dnome2 Sie können über ApiClient.rest_client.pool_manager
auf PoolManager zugreifen. Wenn Sie möchten, dass Änderungen auf jeden Client angewendet werden, müssen Sie ApiClient
direkt erstellen und diese beim Erstellen eines neuen Clientobjekts übergeben.
Am Beispiel der Zoohandlung:
PetApi
erstellen, wird eine eigene Instanz von ApiClient
sei denn, Sie übergeben Ihre eigene über das api_client
kw (als PetApi.api_client
).ApiClient
erstellt seine eigenen RESTClientObject
(als ApiClient.rest_client
)RESTClientObject
erstellt seine eigenen urllib3.PoolManager
(als RESTClientObject.pool_manager
)Aus diesem Grund müssen Sie alle neuen Clients so einstellen, dass sie diese bestimmte ApiClient
-Instanz verwenden. Wenn Sie dies nicht tun, erstellen sie ihre eigenen mit Standardeinstellungen. Ich denke, das könnte nützlich sein, wenn Sie möchten, dass verschiedene APIs unterschiedliche PoolManager-Einstellungen haben oder so.
Hier ist ein Beispiel dafür, wie Sie festlegen und sicherstellen, dass es für alle API-Clients der Zoohandlung gilt:
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)
Ich habe es gerade offline getestet und überprüft, ob urllib3 10 Versuche unternommen hat, während der Standardwert 3 ist
Nebenbemerkung / Tangens : Wenn dies jedes Mal ärgerlich ist und es Ihnen nichts ausmacht, die generierte swagger_client-Bibliothek direkt zu bearbeiten, können Sie dies zum Standardverhalten machen, indem Sie ApiClient
die Clients selbst instanziieren lassen und self
wenn es das tut. Schnelles schmutziges Beispiel, in ApiClient.__init__
könnten Sie Folgendes tun:
from .apis import PetApi
self.pet_api = PetApi(api_client=self)
Auf diese Weise müssten Sie nur einmal ApiClient
erstellen und die Poolmanager-Einstellungen aktualisieren und könnten über api_client.pet_api.find_pets_by_status('foo')
auf die anderen Clients zugreifen, und alle Änderungen, die Sie später über ApiClient vornehmen, werden berücksichtigt alle ihm zugewiesenen Clients. Wenn Sie mehrere Clients erstellen, müssen Sie die Clients nicht explizit für jeden einzelnen neu festlegen
Vielen Dank @arcward ! Werde das ausprobieren und dich wissen lassen, wenn ich irgendwelche Probleme sehe.
Hilfreichster Kommentar
@ dnome2 Sie können über
ApiClient.rest_client.pool_manager
auf PoolManager zugreifen. Wenn Sie möchten, dass Änderungen auf jeden Client angewendet werden, müssen SieApiClient
direkt erstellen und diese beim Erstellen eines neuen Clientobjekts übergeben.Am Beispiel der Zoohandlung:
PetApi
erstellen, wird eine eigene Instanz vonApiClient
sei denn, Sie übergeben Ihre eigene über dasapi_client
kw (alsPetApi.api_client
).ApiClient
erstellt seine eigenenRESTClientObject
(alsApiClient.rest_client
)RESTClientObject
erstellt seine eigenenurllib3.PoolManager
(alsRESTClientObject.pool_manager
)Aus diesem Grund müssen Sie alle neuen Clients so einstellen, dass sie diese bestimmte
ApiClient
-Instanz verwenden. Wenn Sie dies nicht tun, erstellen sie ihre eigenen mit Standardeinstellungen. Ich denke, das könnte nützlich sein, wenn Sie möchten, dass verschiedene APIs unterschiedliche PoolManager-Einstellungen haben oder so.Hier ist ein Beispiel dafür, wie Sie festlegen und sicherstellen, dass es für alle API-Clients der Zoohandlung gilt:
Ich habe es gerade offline getestet und überprüft, ob urllib3 10 Versuche unternommen hat, während der Standardwert 3 ist
Nebenbemerkung / Tangens : Wenn dies jedes Mal ärgerlich ist und es Ihnen nichts ausmacht, die generierte swagger_client-Bibliothek direkt zu bearbeiten, können Sie dies zum Standardverhalten machen, indem Sie
ApiClient
die Clients selbst instanziieren lassen undself
wenn es das tut. Schnelles schmutziges Beispiel, inApiClient.__init__
könnten Sie Folgendes tun:Auf diese Weise müssten Sie nur einmal
ApiClient
erstellen und die Poolmanager-Einstellungen aktualisieren und könnten überapi_client.pet_api.find_pets_by_status('foo')
auf die anderen Clients zugreifen, und alle Änderungen, die Sie später über ApiClient vornehmen, werden berücksichtigt alle ihm zugewiesenen Clients. Wenn Sie mehrere Clients erstellen, müssen Sie die Clients nicht explizit für jeden einzelnen neu festlegen