
Clone of suds 0.4 + suds-0.4-CVE-2013-2217.patch
OVERVIEW
"Suds" वेब सेवा क्लाइंट पायथन के लिए एक हल्का SOAP-आधारित क्लाइंट है, जो 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 में शुरू की गई मल्टी-पोर्ट सेवाओं के लिए समर्थन का विस्तार करता है। यह जोड़ एकाधिक सेवाओं को समान विधि परिभाषित करने की अनुमति देता है और सड्स इसे उचित रूप से संभालेगा। अनुभाग 'एकाधिक पोर्ट वाली सेवाएं:' देखें।
मल्टी-डॉक्यूमेंट document/literal सोप बाइंडिंग शैली के लिए समर्थन जोड़ें। अनुभाग 'मल्टी-डॉक्यूमेंट Document/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' schemaLocations को namespace-uri में मैप करने के लिए समर्थन जोड़ें।
यह उन आयातों के लिए है जो schemaLocation निर्दिष्ट नहीं करते हैं और फिर भी स्कीमा को डाउनलोड करने की अपेक्षा करते हैं।
जैसे: Axis 'http://schemas.xmlsoap.org/soap/encoding/' का संदर्भ बिना schemaLocation के देता है।
इसलिए, ऐसा करके:
from suds.xsd.sxbasic import Import. Import.bind('http://schemas.xmlsoap.org/soap/encoding/')
स्कीमा एक schemaLocation से बंध जाता है और यह डाउनलोड हो जाता है।
बुनियादी अनमार्शलर को /schema/ की आवश्यकता नहीं है। इसे पुनर्गठन के दौरान हटा दिया जाना चाहिए था लेकिन छूट गया था।
क्लाइंट को अपडेट करें ताकि kwargs को send() में पास किया जा सके और WSDL में सेवा स्थान को ओवरराइड करने के लिए /location/ kwarg जोड़ें।
मार्शलर को अपडेट करें ताकि उन ऑब्जेक्ट विशेषताओं के लिए XML उत्सर्जित न हो जो दोनों वैकल्पिक और value=None हों और जो तत्वों और/या विशेषताओं का प्रतिनिधित्व करती हों। * फैक्ट्री (बिल्डर) को अपडेट करें ताकि सभी विशेषताएँ शामिल हों। * SchemaObject में optional() विधि जोड़ें।
यदि निर्दिष्ट किया गया हो तो WSDL को अपडेट करें ताकि संचालन में नेमस्पेस ओवरराइड हो।
स्कीमा लोडिंग समस्या ठीक करें - आयात प्रसंस्करण से पहले सभी स्कीमा बनाएं।
फेडोरा में सबमिशन की तैयारी में पैकेजिंग अपडेट करें
संस्करण 0.2.7 (8-11-08):
संस्करण 0.2.6 (8-5-08):
संस्करण 0.2.5 (8-01-08):
(XSD) पैकेज को ओवरहाल किया गया। यह नया (विलय) दृष्टिकोण सरल है और अधिक विश्वसनीय और रखरखाव योग्य होना चाहिए। साथ ही, बेहतर प्रदर्शन प्रदान करना चाहिए क्योंकि मर्ज की गई स्कीमा डिक्शनरी लुकअप के माध्यम से लुकअप करती है।
इस ओवरहाल से वर्तमान TypeNotFound और xs:extension/ समस्याएं ठीक होनी चाहिए, मुझे उम्मीद है :-)।
dateTime मुद्रण बग ठीक किया गया।
उन xsd प्रकारों के लिए बिल्डर.Builder में अनंत पुनरावृत्ति रोकथाम जोड़ी गई जिनमें स्वयं शामिल होते हैं।
संस्करण 0.2.4 (7-28-08):
संस्करण 0.2.3 (7-23-08):
संस्करण 0.2.2 (7-8-08):
Exception.init() का उपयोग करके Exception.message सेट करने के लिए अपवादों को अधिक /मानक/ पायथन बनाने के लिए अपडेट करें जैसा कि टिकट #14 द्वारा सुझाया गया है; bindings को अपडेट करें ताकि WebFault (p) पास करके उठाया जा सके
बाइंडिंग में लौटाए गए मानों में एकाधिक रूट नोड्स को संभालने की क्षमता जोड़ें; सूचियों के लौटाए जाने के विपरीत एक समग्र वस्तु के रूप में लौटाया गया
सोपएक्शन को उद्धरणों में संलग्न करने के लिए ठीक करें
xs:all/ के लिए समर्थन जोड़ें
SchemaObject में unbounded() विधि ठीक करें
स्कीमा को नए (xsd) पैकेज में पुनर्गठित किया गया। फ़ाइलें बहुत बड़ी हो रही थीं। क्वेरी में execute() जोड़ा गया और suds को Schema.find() का सीधे उपयोग करने के बजाय क्वेरी को execute() करने के लिए रेट्रोफिट किया गया। साथ ही, स्कीमा से hokey start() विधियों को हटाया गया, साथ ही क्वेरी वृद्धि को भी।
आउटबाउंड सॉप संदेशों और/या इनबाउंड रिप्लाई संदेशों को इंजेक्ट करने के लिए उपयोग किया जाने वाला inject कीवर्ड जोड़ें। SoapClient को रिफैक्टर करें और
नेमस्पेस व्यवहार के बेहतर प्रबंधन के लिए sax में Namespace वर्ग जोड़ें; suds को Namespace आयात और उपयोग करने के लिए रेट्रोफिट करें
संदर्भित प्रकारों (विशेषताओं @base="",@type="" होने पर) को हल करने के लिए उपयोग किए जाने वाले डिफ़ॉल्ट नेमस्पेस को बदलें ताकि जब कोई उपसर्ग निर्दिष्ट न हो: targetNamespace के बजाय XML (नोड) नेमस्पेस का उपयोग करें।
[email protected] द्वारा टिकट #13 में परिभाषित फिक्स लागू करें
सेवा परिभाषा को अपडेट करें ताकि सेवा विधियों को ' my_method(xs:int arg0, Person arg1) ' के रूप में प्रदर्शित किया जाए ' my_method(arg0{xs:int}, arg1{Person}) ' के बजाय जो पारंपरिक विधि हस्ताक्षरों की तरह अधिक है
अनमार्शलर में xsd/पायथन प्रकार रूपांतरण जोड़ें (केवल XBoolean); अनमार्शलर को Content वर्ग का उपयोग करने के लिए रिफैक्टर करें जो API को स्वच्छ बनाता है, मार्शलर और अनमार्शलर के बीच समरूपता जोड़ता है, स्कीमा-संपत्ति आधारित प्रकार रूपांतरण के लिए अच्छा तंत्र प्रदान करता है
मार्शलर को Appenders के साथ रिफैक्टर करें; बाइंडिंग्स में returned_type() और returnes_collection() के लिए फिक्स का समर्थन करने के लिए resolve() में nobuiltin फ़्लैग जोड़ें
(202,204) http कोड के लिए समर्थन जोड़ें
XBoolean और मैपिंग जोड़ें; प्रकार रूपांतरणों की तैयारी में TreeResolver में findattr() जोड़ें
स्कीमा और स्कीमा प्रॉपर्टी लोडिंग अपडेट की गई (गहरी पुनरावृत्ति रोक दी गई); आयातित स्कीमा को बदल दिया गया ताकि वे अब आयातित स्कीमा की नकल न करें, बल्कि आयात प्रॉक्सी अनुरोध खोजें; ServiceDefinition वर्ग जोड़ा गया जो बेहतर सेवा निरीक्षण प्रदान करता है; साथ ही नेमस्पेस मैपिंग प्रदान करता है और प्रकार दिखाता है; स्कीमा प्रॉपर्टी API सरलीकृत की गई; xs:any और xs:anyType के लिए समर्थन जोड़ा गया; कुछ स्कीमा लुकअप समस्याएं ठीक की गईं; बाइंडिंग क्लासेस को थोड़ा रिफैक्टर किया गया; बहुत सारी डिबग लॉगिंग जोड़ी गई (प्रदर्शन के लिए कुछ को टिप्पणी करनी पड़ सकती है - कुछ आर्ग महंगे हैं)।
संस्करण 0.2.1 (5-8-08):
schema.py SchemaProperty लोडिंग अनुक्रम को अपडेट करें ताकि स्कीमा 3 चरणों में लोड हो: 1) कच्चा पेड़ बनाएं। 2) @ref और @base जैसे निर्भरताओं को हल करें। 3) पेड़ को समतल करने (denormalize) के लिए आवश्यकतानुसार पोते-बच्चों को प्रचारित करें।
wsdl भी बदल दिया गया ताकि स्कीमा केवल एक बार लोड करके संग्रहीत किया जा सके। स्कीमा संग्रह को बदल दिया गया ताकि स्कीमा 2 चरणों में लोड हों: 1) सभी कच्ची स्कीमा ऑब्जेक्ट बनाएं। 2) स्कीमा लोड करें।
यह सुनिश्चित करता है कि स्थानीय 'd स्कीमा को तब पाया जा सके जब क्रम से बाहर संदर्भित किया जाए। sax.py Element इंटरफ़ेस बदल गया: attribute() को get() और set() से बदल दिया गया। साथ ही, विशेषता मानों तक पहुँचने के लिए getitem और setitem का उपयोग किया जा सकता है। sax.py के लिए एपीडॉक्स अपडेट किए गए। और ... अंत में अब ठीक से समर्थित है।
लॉगिंग ठीक करें: suds.init.logger() में INFO पर सेट न करके; केवल रूट लॉगर पर हैंडलर सेट करें; लॉगर (log) को क्लासेस से मॉड्यूल में स्थानांतरित किया और लॉगर नाम के लिए name का उपयोग किया। नोट: इसका मतलब है कि सॉप संदेश लॉगिंग सक्षम करने के लिए: > > logger('suds.serviceproxy').setLevel(logging.DEBUG) > -- इसके बजाय -- > > logger('serviceproxy').setLevel(logging.DEBUG) >
(xsd) स्कीमा नोड्स के लिए समर्थन जोड़ें जो मुख्य रूप से बिल्डर द्वारा लौटाई गई ऑब्जेक्ट्स को प्रभावित करता है
serviceproxy.py:set_proxies() को INFO के बजाय DEBUG लॉग करने के लिए अपडेट करें।
स्कीमा str को बेहतर बनाएं ताकि कच्चा xml और मॉडल दोनों दिखाई दें (ज्यादातर डिबगिंग के लिए)।
संस्करण-0.2 (04-28-08):
इसमें rpc/encoded सॉप शैली का पहला कट शामिल है।
Property क्लास को suds.sudsobject.Object से बदल दिया गया। Property क्लास बहुत समय पहले विकसित की गई थी थोड़े अलग उद्देश्य के साथ। suds Object एक सरल (अधिक सीधा) दृष्टिकोण है जो कम कोड की आवश्यकता है और डिबगर में बेहतर काम करता है।
बाइंडिंग (और एन्कोडिंग) प्रति-विधि आधार पर चुनी जाती है जो wsdl के साथ अधिक सुसंगत है। 0.1.7 और उससे पहले में, बाइंडिंग तब चुनी जाती थी जब ServiceProxy का निर्माण किया गया था और सभी सेवा विधियों के लिए उपयोग किया जाता था। बाइंडिंग को self.binding के रूप में संग्रहीत किया गया था। चूंकि WSDL प्रत्येक संचालन के लिए एक अलग बाइंडिंग शैली और एन्कोडिंग प्रदान करता है, Suds को उसी तरह काम करने के लिए बदलने की आवश्यकता थी।* (nil_supported) और (faults) फ़्लैग्स को **kwargs का उपयोग करके सर्विस प्रॉक्सी में पास किया गया। इन फ़्लैग्स के अलावा, एक (http_proxy) फ़्लैग जोड़ा गया है और इसे urllib2.Request ऑब्जेक्ट में पास किया गया है। निम्नलिखित आर्ग्स समर्थित हैं:
faults = सर्वर द्वारा उठाए गए दोष उठाएँ (डिफ़ॉल्ट: True), अन्यथा सर्विस विधि आह्वान से टपल (http code, object) लौटाएँ।
nil_supported = बाइंडिंग्स उन नोड्स पर xsi:nil="true" सेट करेंगी जिनका value=None है जब यह फ़्लैग True है (डिफ़ॉल्ट: True)। अन्यथा, एक खाली नोड भेजा जाता है।
proxy = अनुरोधों पर निर्दिष्ट करने के लिए एक http प्रॉक्सी (डिफ़ॉल्ट: {})। प्रॉक्सी को {protocol:proxy,} के रूप में परिभाषित किया गया है।
Http प्रॉक्सी समर्थित है (ऊपर देखें)।
ServiceProxy को SoapClient को डेलिगेट करने के लिए रिफ़ैक्टर किया गया। चूँकि सर्विस प्रॉक्सी getattr() के माध्यम से वेब सेवाओं को एक्सपोज़ करती है, ServiceProxy वर्ग द्वारा प्रदान किया गया कोई भी गुण (विधियों सहित) wsdl द्वारा परिभाषित WS संचालन को छिपा देता है। इसलिए, सब कुछ 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) जैसे बिल्ट-इन प्रकारों का पता लगा सके।
version-0.1.7 (04-08-08):
Binding.nil_supported जोड़ा गया जो नियंत्रित करता है कि प्रॉपर्टी वैल्यू (आउट) = None और खाली टैग (इन) को कैसे संसाधित किया जाता है।
Sax हैंडलर को एकाधिक character() कॉलबैक को संभालने के लिए अपडेट किया गया जब सैक्स पार्सर टेक्स्ट को "चंक" करता है। जब node.text None होता है, तो node.text को कैरेक्टर्स पर सेट किया जाता है। अन्यथा, कैरेक्टर्स को जोड़ा जाता है। धन्यवाद - [email protected]
विशेष (text) विशेषता को text से बदल दिया गया ताकि "text" नाम के प्राकृतिक तत्वों की अनुमति हो सके।
यूनिकोड समर्थन जोड़ा गया:
XML आउटपुट UTF-8 के रूप में एन्कोड किया गया जो HTTP हेडर से मेल खाता है और यूनिकोड का समर्थन करता है।
SchemaCollection को builtin() और custom() विधियाँ प्रदान करने के लिए बदला गया। इसे समर्थन देने के लिए, sax.py में Element में findPrefixes() जोड़ा गया। यह वैसे भी एक बेहतर दृष्टिकोण है क्योंकि wsdl और स्कीमों में http://www.w3.org/2001/XMLSchema के कई उपसर्ग हो सकते हैं। doc/lit और rpc/lit दोनों बाइंडिंग के साथ परीक्षण किया गया।
बाइंडिंग पैकेजों को document & rpc से literal & encoded में रिफ़ैक्टर किया गया।
पूर्ण नेमस्पेस समर्थन का समापन इस प्रकार है:
Property उस क्रम में विशेषता नाम (कुंजियाँ) बनाए रखता है जिस क्रम में उन्हें जोड़ा गया था। इसका मतलब यह भी है कि get_item() और get_names() क्रमबद्ध मान लौटाते हैं। (हालाँकि, मुझे संदेह है कि ऑर्डरिंग वास्तव में wsdl/स्कीमा में निर्दिष्ट ऑर्डर का उपयोग करके मार्शलर में की जानी चाहिए)
schema.py का प्रमुख रिफ़ैक्टरिंग। प्राथमिक लक्ष्य नेमस्पेस द्वारा पूरी तरह से योग्य प्रकार लुकअप की तैयारी है। एक बार पूरा होने के बाद, विशेषता मानों पर उपसर्ग अब नहीं हटाए जाएंगे (शुद्ध नहीं किए जाएंगे)। परिवर्तन सारांश: 1) SchemaProperty ओवरले क्लासेस init पर बनाई गईं, न कि ऑन-डिमांड पर। 2) स्कीमा आयात अब Schema के बजाय नए Import वर्ग द्वारा किए जाते हैं। 3) Schema एक फ़ैक्टरी का उपयोग करके शीर्ष-स्तरीय गुण लोड करता है। 4) सभी SchemaProperty /children/ सूचियों को SchemaProperty व्युत्पन्न वर्गों में cmp द्वारा सॉर्ट किया जाता है। यह सुनिश्चित करता है कि समान नाम वाले प्रकार निम्नलिखित क्रम में हल किए जाएँ (Import, Complex, Simple, Element)। 5) सभी /children/ SchemaProperty सूचियाँ init पर बनाई जाती हैं, न कि ऑन-डिमांड पर। 6) SchemaGroup बनाया गया और WSDL वर्ग अपडेट किया गया। यह wsdl को नोड्स को एकत्रित करने से बेहतर काम करता है जो wsdl पैरेंट एलिमेंट से लिंकेज को अलग करता है जिसमें नेमस्पेस उपसर्ग मैपिंग होती है। 7) एलिमेंट दोनों नेमस्पेस रीमैपिंग और आयातित स्कीमा के targetNamespace और संबंधित उपसर्ग मैपिंग के उपसर्ग रीमैपिंग को ठीक से संभालता है। उदा: SCHEMA-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 के साथ संदर्भित करेगा, SCHEMA-A के targetNamespace को http://nsABC में अपडेट किया जाना चाहिए और type=tns:something वाले सभी तत्वों को type=abc:something में अपडेट किया जाना चाहिए ताकि उन्हें हल किया जा सके।
अनमार्शलिंग समस्या ठीक की गई जहाँ नोड्स को प्रॉपर्टी में (text, value) के रूप में जोड़ा जा रहा था। यह तब पेश किया गया था जब बाइंडिंग्स को रिफ़ैक्टर किया गया था।
विभिन्न Property प्रिंट समस्याएँ ठीक की गईं।
नोट्स:
Coniuro के Jesper Noehr को rpc/literal बाइंडिंग के बहुमत के लिए और #suds पर बहुत सारे सहयोग के लिए धन्यवाद।
version-0.1.6 (03-06-08):
version-0.1.5( 02-21-08 ):
version-0.1.4 (12-21-07):
version-0.1.3 (12-19-07):
version-0.1.2 (12-18-07):
इस रिलीज़ में Property में निम्नलिखित अद्यतन शामिल हैं: * मेटाडेटा समर्थन * ओवरराइड: getitem, setitem, contans * XML दस्तावेज़ों के लिए नेमस्पेस को संभालने के लिए Property.metadata का उपयोग करने के लिए property(reader|writer) में परिवर्तन * setup.py requires को ठीक करता है।
version-0.1.1 (12-17-07):
यह रिलीज़ fedora में होस्ट की गई पहली रिलीज़ को चिह्नित करती है।
sudsobject.Property जोड़ें; एक प्रॉपर्टी एक विशेष ऑब्जेक्ट है जिसमें एक (value) विशेषता होती है और यह बिल्डर (फैक्ट्री) द्वारा बिना बच्चों के स्कीमा-प्रकारों के लिए लौटाया जाता है जैसे: और ; बिल्डर, मार्शलर्स और रिज़ॉल्वर्स को प्रॉपर्टीज को संभालने के लिए अपडेट किया गया; रिज़ॉल्वर, स्कीमा को विशेषता लुकअप को संभालने के लिए भी अपडेट किया गया (जो अनुपलब्ध था)
उपयोगकर्ता द्वारा परिभाषित सोप हेडर के लिए आधारभूत कार्य जोड़ें।
टिकट #7 के अनुसार elementFormDefault ठीक करें
बाइंडिंग से अप्रयुक्त kwargs हटाएं; wsdl में बाइंडिंग कैश करें; लीगेसी ServiceProxy को {नए} Client API को डेलिगेट करने के लिए रेट्रोफिट करें; 'nillable' विशेषता पर प्राकृतिक हैंडलिंग के पक्ष में कीवर्ड nil_supported हटाएं स्कीमा के भीतर
विशेषता फ़्लैग (nillable और form) के लिए समर्थन जोड़ें
Proxy (दूसरी पीढ़ी का API) वर्ग जोड़ें
एक्सेसर/रूपांतरण फ़ंक्शन जोड़ें ताकि उपयोगकर्ता को x विशेषताओं तक पहुँचने की आवश्यकता न हो। साथ ही आसान रूपांतरण और पुनरावृत्ति के लिए todict() और get_items() जोड़ें
गहराई में देखने से पहले @ref के लिए शीर्ष-स्तरीय तत्व खोजें
SchemaObject में derived() जोड़ें। यह सुनिश्चित करने के लिए आवश्यक है कि सभी व्युत्पन्न प्रकार (wsdl क्लासेस) xsi:type द्वारा योग्य हों, बिना suds के पिछले रिलीज़ों में की गई सभी कस्टम प्रकारों के लिए xsi:type निर्दिष्ट किए। लिटरल मार्शलर को अपडेट करें ताकि केवल तब xsi:type जोड़ा जाए जब प्रकार को निर्दिष्ट करने की आवश्यकता हो।
सैक्स में ns प्रचार को बदलें ताकि माता-पिता के पास उपसर्ग होने पर ns को माता-पिता में प्रचारित होने से रोका जा सके।
बाइंडिंग returned_type() को (अनसुलझा) Element लौटाने के लिए बदलें
नई सुविधाओं का समर्थन करने और रिपोर्ट किए गए बगों को ठीक करने के लिए, मैं Suds में उन घटकों को रिफैक्टर करने और उम्मीद है कि विकसित करने की प्रक्रिया में हूं जो इनपुट/आउटपुट अनुवाद प्रदान करते हैं:
यह विकास इन घटकों के बीच बेहतर समरूपता प्रदान करेगा:
बिल्डर और अनमार्शलर पायथन (sudsobject.Object का उपवर्ग) ऑब्जेक्ट्स का उत्पादन करेंगे:
और
मार्शलर, बिल्डर या अनमार्शलर द्वारा उत्पादित पायथन ऑब्जेक्ट्स का उपभोग करते हुए, इस मानक जानकारी का लाभ उठाकर उपयुक्त आउटपुट ( 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() विधि जैसे नाम टकराव को रोकें। मैंने सभी विधियों (क्लास विधियों सहित) को एक फ़ैक्टरी क्लास में स्थानांतरित कर दिया है जो Object क्लास में एक क्लास attr ( factory ) के रूप में शामिल है। अब जब सभी विशेषताओं में पायथन बिल्ट-इन नामकरण है, हमारे पास और कोई नाम टकराव नहीं होना चाहिए। यह निश्चित रूप से मानता है कि कोई wsdl/schema इकाई नाम में पायथन बिल्ट-इन नामकरण सम्मेलन वाला नाम नहीं होगा लेकिन मुझे कहीं न कहीं रेखा खींचनी ही होगी :-)