Swagger-codegen: [python] bagaimana kita bisa memanfaatkan mekanisme coba lagi untuk permintaan yang dibuat melalui sdk.

Dibuat pada 15 Sep 2017  ·  3Komentar  ·  Sumber: swagger-api/swagger-codegen

Deskripsi

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.

Versi swagger-codegen

2.2.3

Konten atau url file deklarasi kesombongan
Python Question

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 membuat ApiClient secara langsung, pastikan untuk meneruskannya setiap kali Anda membuat objek klien baru.

Menggunakan toko hewan peliharaan sebagai contoh:

  • Saat membuat klien baru seperti 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

Semua 3 komentar

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:

  • Saat membuat klien baru seperti 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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat