Swagger-codegen: [python] كيف يمكننا استخدام آلية إعادة المحاولة للطلبات التي يتم إجراؤها عبر sdk.

تم إنشاؤها على ١٥ سبتمبر ٢٠١٧  ·  3تعليقات  ·  مصدر: swagger-api/swagger-codegen

وصف

باستخدام python sdk ، كيف يمكننا تمرير معامل / وسيطة إعادة المحاولة في كائن poolmanager؟ لنفترض أنه إذا كان الطلب يستغرق وقتًا أطول من المعتاد لأي سبب ، ولذا نود تمرير رقم إعادة المحاولة ، فهل يمكننا استخدام فئة إعادة المحاولة التي يدعمها urllib3؟ نقدر مساعدتكم.

نسخة Swagger-codegen

2.2.3

محتوى ملف إعلان Swagger أو عنوان url
Python Question

التعليق الأكثر فائدة

@ dnome2 يمكنك الوصول إلى PoolManager من خلال ApiClient.rest_client.pool_manager . إذا كنت تريد تطبيق التغييرات على كل عميل ، فستحتاج إلى إنشاء ApiClient مباشرةً ، مع التأكد من اجتيازه كلما قمت بإنشاء كائن عميل جديد.

باستخدام متجر الحيوانات الأليفة كمثال:

  • عند إنشاء عميل جديد مثل PetApi ، فإنه يُنشئ مثيله الخاص بـ ApiClient ما لم تمر عبر api_client kw (مثل PetApi.api_client )
  • ApiClient بإنشاء RESTClientObject (مثل ApiClient.rest_client )
  • RESTClientObject بإنشاء urllib3.PoolManager (مثل RESTClientObject.pool_manager )

لهذا السبب ستحتاج إلى تعيين جميع العملاء الجدد لاستخدام مثيل ApiClient المحدد - إذا لم تقم بذلك ، فسيقومون بإنشاء حساباتهم الخاصة باستخدام الإعدادات الافتراضية. أعتقد أن هذا قد يكون مفيدًا إذا كنت تريد أن تحتوي واجهات برمجة التطبيقات المختلفة على إعدادات PoolManager مختلفة أو شيء من هذا القبيل.

في ما يلي مثال على كيفية تعيينك والتأكد من تطبيقه على جميع عملاء واجهة برمجة تطبيقات متجر الحيوانات الأليفة:

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 كومينتر

سم مكعبtaxponfrolmbohlool

@ dnome2 يمكنك الوصول إلى PoolManager من خلال ApiClient.rest_client.pool_manager . إذا كنت تريد تطبيق التغييرات على كل عميل ، فستحتاج إلى إنشاء ApiClient مباشرةً ، مع التأكد من اجتيازه كلما قمت بإنشاء كائن عميل جديد.

باستخدام متجر الحيوانات الأليفة كمثال:

  • عند إنشاء عميل جديد مثل PetApi ، فإنه يُنشئ مثيله الخاص بـ ApiClient ما لم تمر عبر api_client kw (مثل PetApi.api_client )
  • ApiClient بإنشاء RESTClientObject (مثل ApiClient.rest_client )
  • RESTClientObject بإنشاء urllib3.PoolManager (مثل RESTClientObject.pool_manager )

لهذا السبب ستحتاج إلى تعيين جميع العملاء الجدد لاستخدام مثيل ApiClient المحدد - إذا لم تقم بذلك ، فسيقومون بإنشاء حساباتهم الخاصة باستخدام الإعدادات الافتراضية. أعتقد أن هذا قد يكون مفيدًا إذا كنت تريد أن تحتوي واجهات برمجة التطبيقات المختلفة على إعدادات PoolManager مختلفة أو شيء من هذا القبيل.

في ما يلي مثال على كيفية تعيينك والتأكد من تطبيقه على جميع عملاء واجهة برمجة تطبيقات متجر الحيوانات الأليفة:

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 التقييمات