الدالة validate.validator()‎‎ في بايثون

من موسوعة حسوب
< Python‏ | wsgiref‏ | validate
مراجعة 09:07، 27 ديسمبر 2018 بواسطة Mohammed Taher (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

تغلّف هذه الدالة التطبيق المعطى وتعيد كائن تطبيق WSGI جديد، وسيوجّه التطبيق المعاد جميع الطلبات إلى التطبيق الأصلي، وسيتحقّق من أنّ كلًّا من التطبيق والمخدّم الذي يستدعيه متوافقان مع معايير WSGI وللبروتوكول RFC 2616.

يؤدي وجود أيّ حالة من حالات عدم التوافق إلى إطلاق الخطأ AssertionError، ولكن يجب الانتباه إلى أنّ طريقة التعامل مع هذه الأخطاء تعتمد على المخدّم، فعلى سبيل المثال يعطي المخدّم wsgiref.simple_server و المخدّمات المستندة على أصناف الوحدة wsgiref.handlers (والتي لا تعيد تعريف توابع التعامل مع الأخطاء للقيام بأمور أخرى) رسالة بسيطة تشير إلى حدوث خطأ ما، ثم تلقي الخطأ في sys.stderr أو أي تدفق آخر للأخطاء.

يمكن لهذه الدالة أن تنتج مخرجات باستخدام وحدة warnings أيضًا، وذلك للإشارة إلى أي سلوك قد يكون موضع شكّ فيما إذا كان مسموحًا به في معايير PEP 3333 أو لا.

تكتب مثل هذه التحذيرات في sys.stderr (وليس في wsgi.errors إلا إذا صادف كونهما الكائن نفسه) ما لم تُخفَ باستخدام خيارات بايثون في سطر الأوامر أو باستخدام الواجهة البرمجية لوحدة warnings.

البنية العامة

wsgiref.validate.validator(application)

أمثلة

يبين المثال التالي طريقة استخدام الدالة:

from wsgiref.validate import validator
from wsgiref.simple_server import make_server

# الكائن القابل للاستدعاء في هذا المثال غير مطابق للمعايير
# لذا فإنّ عملية التحقّق ستطلق خطأ
def simple_app(environ, start_response):
    status = '200 OK'  # HTTP Status
    headers = [('Content-type', 'text/plain')]  # HTTP Headers
    start_response(status, headers)


	# عملية التحقق ستتوقف هنا لأنّ من الواجب أن نعيد قائمة
    # وستخبرنا دالة التحقق بذلك.
    return b"Hello World"

# هذا هو التطبيق المغلّف بدالة التحقق

validator_app = validator(simple_app)

with make_server('', 8000, validator_app) as httpd:
    print("Listening on port 8000....")
    httpd.serve_forever()

مصادر