باستخدام python sdk ، كيف يمكننا تمرير معامل / وسيطة إعادة المحاولة في كائن poolmanager؟ لنفترض أنه إذا كان الطلب يستغرق وقتًا أطول من المعتاد لأي سبب ، ولذا نود تمرير رقم إعادة المحاولة ، فهل يمكننا استخدام فئة إعادة المحاولة التي يدعمها urllib3؟ نقدر مساعدتكم.
2.2.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 ! سنحاول ذلك ونعلمك إذا رأيت أي مشاكل.
التعليق الأكثر فائدة
@ 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 مختلفة أو شيء من هذا القبيل.في ما يلي مثال على كيفية تعيينك والتأكد من تطبيقه على جميع عملاء واجهة برمجة تطبيقات متجر الحيوانات الأليفة:
لقد اختبرته للتو في وضع عدم الاتصال من طرفي وتحققت من إجراء urllib3 10 محاولات ، بينما الافتراضي هو 3
Sidenote / tangent : إذا كان هذا مزعجًا في كل مرة ، ولا تمانع في تحرير مكتبة swagger_client التي تم إنشاؤها مباشرةً ، فيمكنك إجراء هذا السلوك الافتراضي من خلال جعل العملاء
ApiClient
يمثلون العملاء بمفردهم ، ويمررونself
عندما يحدث ذلك. مثال قذر سريع ، فيApiClient.__init__
، يمكنك القيام بما يلي:بهذه الطريقة ، ستحتاج فقط إلى إنشاء
ApiClient
وتحديث إعدادات مدير التجمع مرة واحدة ، ويمكنك الوصول إلى العملاء الآخرين من خلاله مثلapi_client.pet_api.find_pets_by_status('foo')
وأي تغييرات تجريها عبر ApiClient لاحقًا ستنعكس في جميع العملاء المعينين لها. إذا كنت تقوم بإنشاء عدة عملاء ، فإنه يتجنب أيضًا الحاجة إلى تعيين العملاء بشكل صريح مرة أخرى لكل عميل