menggunakan python sdk bagaimana kita bisa melewatkan parameter / argumen coba lagi di objek poolmanager? Katakanlah jika permintaan membutuhkan waktu lebih lama dari biasanya karena alasan apa pun dan jadi kami ingin meneruskan nomor coba lagi, dapatkah kami menggunakan kelas coba lagi yang didukung oleh urllib3? Hargai bantuan Anda.
2.2.3
cc @tvn_jogja @noval_jogja @gojogja_jogja
@ dnome2 Anda dapat mengakses PoolManager melalui ApiClient.rest_client.pool_manager
. Jika Anda ingin perubahan diterapkan ke setiap klien, Anda harus membuat ApiClient
secara langsung, pastikan untuk meneruskannya setiap kali Anda membuat objek klien baru.
Menggunakan toko hewan peliharaan sebagai contoh:
PetApi
, itu membuat instance-nya sendiri dari ApiClient
kecuali Anda mengirimkan milik Anda sendiri melalui api_client
kw (sebagai PetApi.api_client
)ApiClient
membuat sendiri RESTClientObject
(sebagai ApiClient.rest_client
)RESTClientObject
membuat sendiri urllib3.PoolManager
(sebagai RESTClientObject.pool_manager
)Jadi itulah mengapa Anda perlu mengatur semua klien baru untuk menggunakan instance ApiClient
itu- jika tidak, mereka akan membuatnya sendiri dengan pengaturan default. Saya rasa itu mungkin berguna jika Anda ingin API yang berbeda memiliki pengaturan PoolManager yang berbeda atau semacamnya.
Berikut adalah contoh bagaimana Anda mengatur dan memastikan itu berlaku untuk semua klien API toko hewan peliharaan:
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)
Saya baru saja mengujinya secara offline dan memverifikasi urllib3 melakukan 10 upaya, sedangkan defaultnya adalah 3
Sidenote / tangent : Jika itu menjengkelkan untuk dilakukan setiap saat, dan Anda tidak keberatan mengedit pustaka swagger_client yang dihasilkan secara langsung, Anda dapat mengurutkan ini sebagai perilaku default dengan meminta ApiClient
memberi contoh klien sendiri, meneruskan self
ketika itu terjadi. Contoh kotor cepat, dalam ApiClient.__init__
, Anda dapat melakukan:
from .apis import PetApi
self.pet_api = PetApi(api_client=self)
Dengan begitu Anda hanya perlu membuat ApiClient
dan memperbarui pengaturan pengelola kumpulan satu kali, dan dapat mengakses klien lain melaluinya seperti api_client.pet_api.find_pets_by_status('foo')
dan setiap perubahan yang Anda buat melalui ApiClient nanti akan terlihat di semua klien yang ditugaskan untuk itu. Jika Anda membuat banyak klien, tindakan ini juga menghindari kebutuhan untuk menetapkan klien secara eksplisit lagi untuk masing-masing klien
Terima kasih banyak @arcward ! Akan mencobanya dan memberi tahu Anda jika saya melihat masalah apa pun.
Komentar yang paling membantu
@ dnome2 Anda dapat mengakses PoolManager melalui
ApiClient.rest_client.pool_manager
. Jika Anda ingin perubahan diterapkan ke setiap klien, Anda harus membuatApiClient
secara langsung, pastikan untuk meneruskannya setiap kali Anda membuat objek klien baru.Menggunakan toko hewan peliharaan sebagai contoh:
PetApi
, itu membuat instance-nya sendiri dariApiClient
kecuali Anda mengirimkan milik Anda sendiri melaluiapi_client
kw (sebagaiPetApi.api_client
)ApiClient
membuat sendiriRESTClientObject
(sebagaiApiClient.rest_client
)RESTClientObject
membuat sendiriurllib3.PoolManager
(sebagaiRESTClientObject.pool_manager
)Jadi itulah mengapa Anda perlu mengatur semua klien baru untuk menggunakan instance
ApiClient
itu- jika tidak, mereka akan membuatnya sendiri dengan pengaturan default. Saya rasa itu mungkin berguna jika Anda ingin API yang berbeda memiliki pengaturan PoolManager yang berbeda atau semacamnya.Berikut adalah contoh bagaimana Anda mengatur dan memastikan itu berlaku untuk semua klien API toko hewan peliharaan:
Saya baru saja mengujinya secara offline dan memverifikasi urllib3 melakukan 10 upaya, sedangkan defaultnya adalah 3
Sidenote / tangent : Jika itu menjengkelkan untuk dilakukan setiap saat, dan Anda tidak keberatan mengedit pustaka swagger_client yang dihasilkan secara langsung, Anda dapat mengurutkan ini sebagai perilaku default dengan meminta
ApiClient
memberi contoh klien sendiri, meneruskanself
ketika itu terjadi. Contoh kotor cepat, dalamApiClient.__init__
, Anda dapat melakukan:Dengan begitu Anda hanya perlu membuat
ApiClient
dan memperbarui pengaturan pengelola kumpulan satu kali, dan dapat mengakses klien lain melaluinya sepertiapi_client.pet_api.find_pets_by_status('foo')
dan setiap perubahan yang Anda buat melalui ApiClient nanti akan terlihat di semua klien yang ditugaskan untuk itu. Jika Anda membuat banyak klien, tindakan ini juga menghindari kebutuhan untuk menetapkan klien secara eksplisit lagi untuk masing-masing klien