
نسخة من suds 0.4 مع رقعة suds-0.4-CVE-2013-2217.patch
نظرة عامة
عميل خدمات الويب "Suds" هو عميل خفيف الوزن يعتمد على SOAP للغة Python، وهو مرخص تحت رخصة LGPL.
للحصول على التفاصيل، زر:
الإصدار 0.3.6 (04-31-09):
الإصدار 0.3.5 (04-16-09):
الإصدار 0.3.4 (02-24-09):
الإصدار 0.3.3 (11-31-08):
الإصدار 0.3.2 (11-7-08):
الإصدار 0.3.1 (10-1-08):
الإصدار 0.3 (9-30-08):
توسيع دعم الخدمات متعددة المنافذ الذي تم تقديمه في 0.2.9. هذه الإضافة، توفر لخدمات متعددة تعريف نفس الطريقة وسيقوم suds بمعالجتها بشكل صحيح. انظر القسم 'الخدمات ذات المنافذ المتعددة:'
إضافة دعم لنمط ربط soap متعدد المستندات document/literal. انظر القسم 'مستندات متعددة Docuemnt/Literal:'
إضافة دعم لعلامات (xs:group, xs:attributeGroup).
إضافة Client.last_sent() و Client.last_received().
الإصدار 0.2.9 (9-09-08):
الإصدار 0.2.8 (8-28-08):
تحديث ربط document/literal لإرسال جذر المستند المشار إليه بواسطة دائمًا. بعد مراجعة أخرى للمساحة ومدخلات المستخدم، يبدو أن العنصر المشار إليه هو دائمًا جذر المستند.
إضافة دعم لربط مواقع المخططات 'binding' بمساحة اسم uri. هذا مخصص للاستيرادات التي لا تحدد موقع مخطط وما زالت تتوقع تنزيل المخطط. على سبيل المثال: يشير Axis إلى 'http://schemas.xmlsoap.org/soap/encoding/' بدون موقع مخطط. لذا، عن طريق القيام بما يلي:
from suds.xsd.sxbasic import Import. Import.bind('http://schemas.xmlsoap.org/soap/encoding/')
يتم ربط المخطط بموقع مخطط ويتم تنزيله.
المُفكك الأساسي لا يحتاج إلى /schema/. كان يجب إزالته أثناء إعادة الهيكلة لكنه فات.
تحديث العميل لتمرير kwargs إلى send() وإضافة وسيط /location/ لتجاوز موقع الخدمة في wsdl.
تحديث المُشكّل لعدم إصدار XML لسمات الكائن التي تمثل عناصر و/أو سمات كلاهما اختياري وقيمته=None. * تحديث المصنع (الباني) لتضمين جميع السمات. * إضافة طريقة optional() إلى SchemaObject.
تحديث wsdl لتجاوز مساحة الاسم في العملية إذا تم تحديدها.
إصلاح مشكلة تحميل المخطط - بناء جميع المخططات قبل معالجة الاستيرادات.
تحديث التعبئة استعدادًا لتقديمها إلى fedora
الإصدار 0.2.7 (8-11-08):
الإصدار 0.2.6 (8-5-08):
الإصدار 0.2.5 (8-01-08):
إعادة هيكلة حزمة (XSD). هذا النهج الجديد (الدمج) أبسط ويجب أن يكون أكثر موثوقية وقابلية للصيانة. كما يجب أن يوفر أداءً أفضل نظرًا لأن المخطط المدمج يقوم بعمليات البحث عبر بحث القاموس.
يجب أن تؤدي هذه الإعادة إلى إصلاح مشاكل TypeNotFound الحالية و xs:extension/، آمل :-).
إصلاح خطأ طباعة dateTime.
إضافة منع العودية اللانهائية في builder.Builder لأنواع xsd التي تحتوي على نفسها.
الإصدار 0.2.4 (7-28-08):
الإصدار 0.2.3 (7-23-08):
الإصدار 0.2.2 (7-8-08):
تحديث الاستثناءات لتكون أكثر /standard/ في Python باستخدام Exception.init() لتعيين Exception.message كما اقترحته التذكرة #14؛ تحديث الروابط لرفع WebFault مع تمرير (p)
إضافة قدرة في الروابط على التعامل مع عُقد جذر متعددة في القيم المُرجَعة؛ تُرجع ككائن مركب على عكس عندما تُرجع القوائم
إصلاح soapAction ليتم إحاطتها بعلامات اقتباس
إضافة دعم لـ xs:all/
إصلاح طريقة unbounded() في SchemaObject
إعادة هيكلة المخطط إلى حزمة جديدة (xsd). الملفات أصبحت كبيرة جدًا. إضافة execute() إلى Query وتعديل suds لاستخدام execute() للاستعلام بدلاً من استخدام Schema.find() مباشرة. أيضًا، نقل طرق start() غير الملائمة من المخطط، بالإضافة إلى زيادة الاستعلام.
إضافة كلمة مفتاحية inject تُستخدم لحقن رسائل soap الصادرة و/أو رسائل الرد الواردة. إعادة هيكلة SoapClient و
إضافة فئة Namespace إلى sax لإدارة أفضل لسلوك مساحة الاسم؛ تعديل suds لاستيراد واستخدام Namespace
تغيير مساحة الاسم الافتراضية المستخدمة لحل الأنواع المشار إليها (التي تحتوي على سمات @base="",@type="") بحيث عندما لا يتم تحديد بادئة: تستخدم مساحة اسم XML (العقدة) بدلاً من targetNamespace.
تطبيق الإصلاح كما هو معرف بواسطة [email protected] في التذكرة #13
تحديث تعريف الخدمة لعرض طرق الخدمة كـ ' my_method(xs:int arg0, Person arg1) ' بدلاً من ' my_method(arg0{xs:int}, arg1{Person}) ' الأكثر شبهاً بتوقيعات الطرق التقليدية
إضافة تحويلات xsd/python إلى المُفكك (XBoolean فقط)؛ إعادة هيكلة المُفكك لاستخدام فئة Content التي تجعل واجهات برمجة التطبيقات أنظف، وتضيف تماثلًا بين المُشكّل(ات) والمُفكك(ات)، وتوفر آلية جيدة لتحويلات النوع القائمة على خاصية المخطط
إعادة هيكلة المُشكّل مع Appenders؛ إضافة علم nobuiltin إلى resolve() لدعم إصلاح returned_type() و returnes_collection() في الروابط.
إضافة دعم لأكواد http (202,204)
إضافة XBoolean والتعيينات؛ إضافة findattr() إلى TreeResolver استعدادًا لتحويلات النوع
تحديث تحميل المخطط وخصائص المخطط (تم إيقاف العودية العميقة)؛ تغيير المخططات المستوردة بحيث لم تعد تنسخ المخططات المستوردة، بدلاً من ذلك يقوم وكلاء الاستيراد بإعادة توجيه الطلبات؛ إضافة فئة ServiceDefinition التي توفر فحص خدمة أفضل؛ كما توفر تعيين مساحة الاسم وإظهار الأنواع؛ تم تبسيط واجهة برمجة تطبيقات خصائص المخطط؛ تمت إضافة دعم لـ xs:any و xs:anyType؛ تم إصلاح بعض مشاكل البحث في المخطط؛ إعادة هيكلة فئات الربط بشكل طفيف؛ تمت إضافة الكثير من تسجيل التصحيح (قد يلزم التعليق على بعضها من أجل الأداء - بعض الوسائط باهظة الثمن).
الإصدار 0.2.1 (5-8-08):
تحديث تسلسل تحميل خاصية Schema.py SchemaProperty بحيث يتم تحميل المخطط في 3 خطوات:
1) بناء الشجرة الخام.
2) حل التبعيات مثل @ref و @base.
3) ترقية الأحفاد حسب الحاجة لتسطيح (إزالة التسوية) الشجرة.
تم تغيير wsdl أيضًا لتحميل المخطط مرة واحدة فقط وتخزينه. تم تغيير مجموعة المخططات لتحميل المخططات في خطوتين: 1) إنشاء جميع كائنات المخطط الخام. 2) تحميل المخططات.
يضمن هذا أنه يمكن العثور على المخططات المستوردة محليًا عند الإشارة إليها خارج الترتيب.
تم تغيير واجهة Element في sax.py: تم استبدال attribute() بواسطة get() و set().
أيضًا، يمكن استخدام getitem و setitem للوصول إلى قيم السمات.
تم تحديث Epydocs لـ sax.py. وأخيرًا... أصبح مدعومًا بشكل صحيح الآن.
إصلاح التسجيل عن طريق: عدم تعيينه إلى info في suds.init.logger()؛ تعيين المعالج على المسجل الجذر فقط؛ نقل المسجل (log) من الفئات إلى الوحدات واستخدام name لاسم المسجل. ملاحظة: هذا يعني أنه لتمكين تسجيل رسائل soap: > > logger('suds.serviceproxy').setLevel(logging.DEBUG) > -- بدلاً من -- > > logger('serviceproxy').setLevel(logging.DEBUG) >
إضافة دعم لعُقد في مخطط (xsd) والتي تؤثر بشكل أساسي على الكائنات المُرجَعة بواسطة الباني
تحديث serviceproxy.py:set_proxies() لتسجيل DEBUG بدلاً من INFO.
تحسين schema str لإظهار كل من xml الخام والنموذج (بشكل أساسي للتصحيح).
الإصدار 0.2 (04-28-08):
يحتوي على القسم الأول لنمط soap rpc/encoded.
استبدال فئة Property بـ suds.sudsobject.Object. تم تطوير فئة Property منذ وقت طويل مع غرض مختلف قليلاً. كائن suds هو نهج أبسط (أكثر مباشرة) يتطلب كود أقل ويعمل بشكل أفضل في المصحح.
يتم اختيار الربط (والتشفير) على أساس كل طريقة وهو أكثر اتساقًا مع wsdl. في <= 0.1.7، كان الربط يُختار عند إنشاء ServiceProxy ويُستخدم لجميع طرق الخدمة. تم تخزين الربط كـ self.binding. نظرًا لأن WSDL يوفر نمط ربط منفصل و ترميز لكل عملية، كان يجب تغيير Suds للعمل بنفس الطريقة.* تم تمرير العلامات (nil_supported) و (faults) إلى وكيل الخدمة باستخدام **kwargs. بالإضافة إلى هذه العلامات، تمت إضافة علامة (http_proxy) وتمريرها إلى كائن urllib2.Request. الوسيطات التالية مدعومة:
دعم وكيل Http (انظر أعلاه).
تمت إعادة هيكلة ServiceProxy لتخويل SoapClient. نظرًا لأن وكيل الخدمة يفضح خدمات الويب عبر getattr()، فإن أي سمة (بما في ذلك الطرق) التي يوفرها الفصل ServiceProxy تخفي عمليات WS المحددة بواسطة wsdl. لذا، من خلال نقل كل شيء إلى SoapClient، لم تعد عمليات wsdl مخفية دون الحاجة إلى استخدام أسماء hoky للسمات والطرق في وكيل الخدمة. بدلاً من ذلك، يحتوي وكيل الخدمة على السمات client و factory (والتي يجب أن تكون في الحقيقة منخفضة المخاطرة لتصادم الأسماء). في الوقت الحالي، لم يتم نقل الطريقتين get_instance() و get_enum() للحفاظ على التوافق العكسي. على الرغم من أن تغيير API المفضل سيكون استبدال:
service = ServiceProxy('myurl') person = service.get_instance('person')
... بشيء مثل ...
service = ServiceProxy('myurl') person = service.factory.get_instance('person')
بعد عدد قليل من الإصدارات مع إعطاء وقت للمستخدمين للتبديل إلى API الجديد، قد تتم إزالة الطريقتين get_instance() و get_enum() مع إشعار بأحرف كبيرة.
تم إصلاح مشكلة حيث لا يحدد wsdl قسم ولا يستطيع Suds حل البادئات لـ مساحة الاسم http://www.w3.org/2001/XMLSchema لاكتشاف الأنواع المضمنة مثل (xs:string).
الإصدار-0.1.7 (04-08-08):
تمت إضافة Binding.nil_supported للتحكم في كيفية معالجة قيم الخصائص (خارج) = None والوسم الفارغ (داخل).
تم تحديث معالج Sax للتعامل مع استدعاءات character() المتعددة عندما يقوم محلل sax بـ "تقطيع" النص. عندما يكون node.text هو None، يتم تعيين node.text إلى الأحرف. وإلا، يتم إلحاق الأحرف. شكرًا - [email protected]
تم استبدال السمة الخاصة (text) بـ text للسماح بالعناصر الطبيعية المسماة "text"
تمت إضافة دعم unicode عن طريق:
تم ترميز مخرجات XML كـ UTF-8 والتي تطابق رأس HTTP وتدعم unicode.
تم تغيير SchemaCollection لتوفير طريقتي builtin() و custom(). لدعم ذلك، تمت إضافة findPrefixes() إلى Element في sax.py. هذا نهج أفضل على أي حال نظرًا لأن wsdl والمخططات قد تحتوي على العديد من البادئات إلى http://www.w3.org/2001/XMLSchema. تم اختباره مع كل من روابط doc/lit و rpc/lit
تمت إعادة هيكلة حزم الربطات من document & rpc إلى literal & encoded
يحتوي على إكمال الدعم الكامل لمساحات الأسماء كما يلي:
تحتفظ Property بأسماء السمات (المفاتيح) بالترتيب الذي تمت إضافتها به. وهذا يعني أيضًا أن get_item() و get_names() تُرجع قيمًا مرتبة. (على الرغم من أنني أشك في أن الترتيب يحتاج حقًا إلى أن يتم في المجمّع باستخدام الترتيب المحدد في wsdl/schema)
إعادة هيكلة رئيسية لـ schema.py. الهدف الأساسي هو التحضير لعمليات بحث عن الأنواع مؤهلة بالكامل بواسطة مساحة الاسم. بمجرد الانتهاء، لن يتم بعد الآن تجريد البادئات من قيم السمات (تطهيرها). ملخص التغيير: 1) تم إنشاء فئات تراكب SchemaProperty في init بدلاً من عند الطلب. 2) يتم تنفيذ واردات المخطط بواسطة فئة Import جديدة بدلاً من Schema. 3) يقوم Schema بتحميل الخصائص من المستوى الأعلى باستخدام مصنع. 4) جميع قوائم /children/ لـ SchemaProperty يتم فرزها بواسطة cmp في الفئات المشتقة من SchemaProperty. يضمن ذلك حل الأنواع التي تحمل نفس الاسم بالترتيب التالي (Import، Complex، Simple، Element). 5) يتم بناء جميع قوائم /children/ لـ SchemaProperty في init بدلاً من عند الطلب. 6) تم إنشاء SchemaGroup وتحديث فئة WSDL. يعمل هذا بشكل أفضل من أن يقوم wsdl بتجميع عقد مما يقطع الارتباط بعنصر wsdl الأصلي الذي يحتوي على تعيين بادئة مساحة الاسم. 7) يتم التعامل مع عنصر بشكل صحيح حيث يتم إجراء كل من إعادة تعيين مساحة الاسم وإعادة تعيين بادئة مساحة الاسم المستهدفة للمخطط المستورد وتعيين البادئة المرتبطة - يتم تنفيذها. مثال: SCHMEA-A بها بادئة (tns) معينة كـ xmlns:tns=http://nsA ولها targetNamespace=http://nsA. SCHEMA-B تقوم باستيراد المخطط A ولها بادئة (abc) معينة كـ xmlns:abc=http://nsABC. SCHEMA-B تستورد A كـ <import namespace=http://nsB xxx schemaLocation=http://nsA/schema-a.xsd>. لذا، نظرًا لأن SCHEMA-B ستشير إلى عناصر SCHEMA-A بالبادئة (abc) مثل abc:something، يجب تحديث targetNamespace لـ SCHEMA-A إلى http://nsABC ويجب تحديث جميع العناصر ذات type=tns:something لتصبح type=abc:something حتى يمكن حلها.
إصلاح مشكلة فك التجميع حيث تتم إضافة العقد إلى الخاصية كـ (نص، قيمة). تم تقديم هذا عندما تمت إعادة هيكلة الربطات.
إصلاح مشاكل طباعة Property المختلفة.
ملاحظات:
شكرًا لـ Jesper Noehr من Coniuro على غالبية ربط rpc/literal و
على الكثير من التعاون في #suds.
الإصدار-0.1.6 (03-06-08):
الإصدار-0.1.5 (02-21-08):
الإصدار-0.1.4 (12-21-07):
الإصدار-0.1.3 (12-19-07):
الإصدار-0.1.2 (12-18-07):
هذا الإصدار يحتوي على تحديث للخاصية يضيف: * دعم البيانات الوصفية * تجاوزات: getitem، setitem، contans * تغييرات خاصية (reader|writer) لاستخدام property.metadata للتعامل مع مساحات الأسماء لمستندات XML. * إصلاح متطلبات setup.py.
الإصدار-0.1.1 (12-17-07):
يمثل هذا الإصدار أول إصدار مستضاف في fedora.
إضافة sudsobject.Property؛ الخاصية هي كائن خاص يحتوي على سمة (value) ويُعاد بواسطة الباني (المصنع) لأنواع المخطط بدون أبناء مثل: و ؛ تم تحديث الباني، والمُشكّلات والمحللون للتعامل مع الخصائص؛ تم تحديث المحلل والمخطط أيضًا للتعامل مع عمليات بحث السمات (كانت مفقودة)
إضافة أساس لرؤوس soap معرفة من قبل المستخدم.
إصلاح elementFormDefault حسب التذكرة #7
إزالة kwargs غير المستخدمة من الروابط؛ تخزين الروابط مؤقتًا في wsdl؛ تعديل ServiceProxy القديم لتوكيل إلى واجهة برمجة تطبيقات العميل {الجديدة}؛ إزالة كلمة مفتاحية nil_supported لصالح المعالجة الطبيعية بواسطة سمة 'nillable' على داخل المخططات
إضافة دعم لعلامات سمة (nillable و form)
إضافة فئة Proxy (الجيل الثاني من واجهة برمجة التطبيقات)
إضافة دوال الوصول/التحويل بحيث لا يحتاج المستخدم إلى الوصول إلى سمات x. إضافة أيضًا todict() و get_items() للتحويل السهل إلى قاموس والتكرار
البحث في العناصر ذات المستوى الأعلى عن @ref قبل البحث بشكل أعمق
إضافة derived() إلى SchemaObject. هذا مطلوب لضمان أن جميع الأنواع المشتقة (فئات wsdl) مؤهلة بواسطة xsi:type دون تحديد xsi:type لجميع الأنواع المخصصة كما في الإصدارات السابقة من suds. تحديث المشكّل الحرفي لإضافة xsi:type فقط عندما يحتاج النوع إلى التحديد.
تغيير ترقية ns في sax لمنع ns من الترقية إلى الأصل عندما يكون للأصل البادئة.
تغيير returned_type() للربط لإرجاع العنصر (غير المحلول)
من أجل دعم الميزات الجديدة وإصلاح الأخطاء المُبلّغ عنها، أنا في طور إعادة هيكلة وتطوير المكونات في Suds التي توفر ترجمات الإدخال/الإخراج:
سيوفر هذا التطور تماثلًا أفضل بين هذه المكونات كما يلي:
سينتج الباني والمُفكك كائنات Python (فئة فرعية من sudsobject.Object) مع:
و
بينما يستهلك المُشكّل(ات) كائنات Python المنتجة بواسطة الباني أو المُفكك، سيستفيد من هذه المعلومات القياسية ل إخراج المخرجات المناسبة (XML/SOAP).
يتصرف كود 0.2.1 في الغالب بهذه الطريقة ولكن... ليس تمامًا. أيضًا، تحتوي التطبيقات على بعض التكرار.
أثناء القيام بذلك، كان من المنطقي استخراج وظيفة "البحث" عن نوع المخطط المشتركة المستخدمة بواسطة فئات الباني والمُشكّلات والمُفكك إلى تسلسل هرمي من فئات "المحلل". هذا يقلل من التعقيد والتكرار لفئات الباني والمُشكّلات والمُفكك ويسمح بشكل أفضل للوحدات. بمجرد اكتمال هذه إعادة الهيكلة، أصبح الفرق بين المُشكّلات الحرفية/المشفرة صغيرًا جدًا. نظرًا لأن كمية الكود في حزم bindings.literal و bindings.encoded كانت صغيرة (وتصبح أصغر) وفي مصلحة الحفاظ على قاعدة كود Suds مضغوطة، قمت بنقل جميع فئات التشكيل إلى وحدة bindings.marshaller. ستتم إزالة جميع الحزم الفرعية bindings.XX.
التأثير الصافي:
جميع المكونات الرئيسية لـ Suds:
الآن لديها أفضل:
... وتوفر بشكل أفضل للميزات/إصلاحات الأخطاء التالية:
استخدم الباني والمُفكك Schema.find() لحل أنواع المخطط. قاموا ببناء مسار كـ "person.name.first" لحل الأنواع في السياق المناسب. نظرًا لأن Schema.find() كان عديم الحالة، فقد حل عناصر المسار الوسيطة في كل استدعاء. فئات المحلل الجديدة ذات حالة وتحل أنواع الأطفال بكفاءة أكبر.
منع تصادمات الأسماء في sudsobject.Object مثل طريقة items(). لقد نقلت جميع الطرق (بما في ذلك طرق الفئة) إلى فئة Factory المضمنة في فئة Object كخاصية فئة ( factory ). الآن بعد أن جميع السمات لها تسمية Python مضمنة، يجب ألا يكون لدينا المزيد من تصادمات الأسماء. هذا بالطبع يفترض أنه لا توجد أسماء كيانات wsdl/moment سيكون لها اسم مع تسمية Python المضمنة ولكن يجب أن أرسم خطًا في مكان ما :-)