
Clone di suds 0.4 + suds-0.4-CVE-2013-2217.patch
PANORAMICA
Il client di servizi web "Suds" è un client leggero basato su SOAP per Python, con licenza LGPL.
Per dettagli, visita:
versione 0.3.6 (04-31-09):
versione 0.3.5 (04-16-09):
versione 0.3.4 (02-24-09):
versione 0.3.3 (11-31-08):
versione 0.3.2 (11-7-08):
versione 0.3.1 (10-1-08):
versione 0.3 (9-30-08):
Estende il supporto per servizi multi-porta introdotto in 0.2.9. Questa aggiunta permette a più servizi di definire lo stesso metodo e suds lo gestirà correttamente. Vedi sezione 'SERVIZI CON PORTE MULTIPLE:'
Aggiungi supporto per lo stile di binding SOAP document/literal multi-documento. Vedi sezione 'MULTI-DOCUMENTO Document/Literal:'
Aggiungi supporto per tag (xs:group, xs:attributeGroup).
Aggiungi Client.last_sent() e Client.last_received().
versione 0.2.9 (9-09-08):
versione 0.2.8 (8-28-08):
Aggiorna binding document/literal per inviare sempre la radice del documento referenziata da . Dopo un'ulteriore revisione dello spazio e dell'input utente, sembra che l'elemento referenziato sia SEMPRE la radice del documento.
Aggiungi supporto per il binding di schemaLocations a namespace-uri. Questo è per gli import che non specificano uno schemaLocation e si aspettano comunque che lo schema venga scaricato. Es: Axis fa riferimento a 'http://schemas.xmlsoap.org/soap/encoding/' senza uno schemaLocation. Quindi, facendo:
da suds.xsd.sxbasic import Import. Import.bind('http://schemas.xmlsoap.org/soap/encoding/')
Lo schema viene associato a uno schemaLocation e viene scaricato.
Il demarshaller base non ha bisogno di un /schema/. Doveva essere rimosso durante il refactoring ma è stato perso.
Aggiorna client per passare kwargs a send() e aggiungi kwarg /location/ per sovrascrivere la posizione del servizio nel wsdl.
Aggiorna marshaller per NON emettere XML per attributi di oggetti che rappresentano elementi e/o attributi che sono entrambi opzionali e value=None. * Aggiorna factory (builder) per includere tutti gli attributi. * Aggiungi metodo optional() a SchemaObject.
Aggiorna wsdl per sovrascrivere il namespace nell'operazione se specificato.
Correggi problema di caricamento schema - costruisci tutti gli schemi prima di processare gli import.
Aggiorna packaging in preparazione dell'invio a fedora.
versione 0.2.7 (8-11-08):
versione 0.2.6 (8-5-08):
versione 0.2.5 (8-01-08):
Revisionato il pacchetto (XSD). Questo nuovo approccio (di merging) è più semplice e dovrebbe essere più affidabile e manutenibile. Dovrebbe anche fornire migliori prestazioni poiché lo schema unito esegue lookup tramite dizionario.
Questa revisione dovrebbe risolvere i problemi correnti di TypeNotFound e xs:extension/, spero :-).
Corretto bug di stampa di dateTime.
Aggiunta prevenzione di ricorsione infinita in builder.Builder per tipi xsd che contengono se stessi.
versione 0.2.4 (7-28-08):
versione 0.2.3 (7-23-08):
versione 0.2.2 (7-8-08):
Aggiorna eccezioni per essere più /standard/ Python usando Exception.init() per impostare Exception.message come suggerito dal Ticket #14; aggiorna binding per sollevare WebFault passando (p).
Aggiungi capacità nei binding di gestire più nodi radice nei valori restituiti; restituiti come oggetto composito, a differenza di quando vengono restituite liste.
Correggi soapAction per essere racchiuso tra virgolette.
Aggiungi supporto per xs:all/
Correggi metodo unbounded() in SchemaObject.
Refactoring dello schema in un nuovo pacchetto (xsd). I file diventavano troppo grandi. Aggiunto execute() a Query e modificato suds per eseguire() query invece di usare Schema.find() direttamente. Inoltre, sposta i metodi start() improvvisati da schema, così come l'incremento delle query.
Aggiungi keyword inject usata per iniettare messaggi SOAP in uscita e/o messaggi di risposta in entrata. Refactoring di SoapClient e
Aggiungi classe Namespace a sax per una migliore gestione del comportamento dei namespace; modifica suds per importare e usare Namespace.
Cambia il namespace predefinito usato per risolvere i tipi referenziati (con attributi @base="", @type="") in modo che quando non viene specificato un prefisso: usi il namespace XML (nodo) invece del targetNamespace.
Applica la correzione come definita da [email protected] nel ticket #13.
Aggiorna la definizione del servizio per stampare a display i metodi del servizio come ' my_method(xs:int arg0, Person arg1) ' invece di ' my_method(arg0{xs:int}, arg1{Person}) ' che è più simile a firme di metodo tradizionali.
Aggiungi conversione di tipo xsd/python al demarshaller (solo XBoolean); refactoring del demarshaller per usare Content che rende le API più pulite, aggiunge simmetria tra marshaller e demarshaller, fornisce un buon meccanismo per conversioni di tipo basate su proprietà dello schema.
Refactoring del marshaller con Appenders; aggiungi flag nobuiltin a resolve() per supportare la correzione per returned_type() e returned_collection() nei binding.
Aggiungi supporto per codici http (202, 204).
Aggiungi XBoolean e mappature; aggiungi findattr() a TreeResolver in preparazione per le conversioni di tipo.
Aggiornato caricamento dello schema e delle proprietà dello schema (ricorsione profonda interrotta); Modificati schemi importati in modo che non copino più gli schemi importati, piuttosto l'import proxy trova le richieste; Aggiungi classe ServiceDefinition che fornisce una migliore ispezione del servizio; fornisce anche mappatura dei namespace e mostra i tipi; API delle proprietà dello schema semplificate; aggiunto supporto per xs:any e xs:anyType; Risolti alcuni problemi di lookup dello schema; Classi Binding leggermente rifattorizzate; Aggiunto molto logging di debug (potrebbe essere necessario commentare alcuni per prestazioni - alcuni degli argomenti sono costosi).
Aggiungi sudsobject.Property; una proprietà è un oggetto speciale che contiene un attributo (value) e viene restituito dal Builder (factory) per tipi di schema senza figli come: e ; Builder, Marshallers e Resolvers aggiornati per gestire le Proprietà; Resolver, Schema aggiornati anche per gestire lookup di attributi (mancava).
Aggiungi basi per header SOAP definiti dall'utente.
Correggi elementFormDefault per il ticket #7.
Rimuovi kwargs inutilizzati dai binding; cache dei binding in wsdl; modifica legacy ServiceProxy per delegare alla {nuova} API Client; rimuovi keyword nil_supported a favore della gestione naturale tramite attributo 'nillable' su negli schemi.
Aggiungi supporto per flag di attributo di (nillable e form).
Aggiungi la classe Proxy (API di seconda generazione).
Aggiungi funzioni di accesso/conversione in modo che l'utente non debba accedere agli attributi x. Aggiungi anche todict() e get_items() per una facile conversione in dizionario e iterazione.
Cerca elementi di primo livello per @ref prima di guardare più in profondità.
Aggiungi derived() a SchemaObject. È necessario per assicurare che tutti i tipi derivati (classi wsdl) siano qualificati da xsi:type senza specificare xsi:type per tutti i tipi personalizzati come fatto in versioni precedenti di suds. Aggiorna il marshaller letterale per aggiungere xsi:type solo quando il tipo deve essere specificato.
Cambia promozione ns in sax per prevenire che ns venga promosso al genitore quando il genitore ha il prefisso.
Cambiato returned_type() del binding per restituire l'Element (non risolto).
Per supportare le nuove funzionalità e correggere i bug riportati, sto rifattorizzando e, si spera, evolvendo i componenti di Suds che forniscono le traduzioni input/output:
Questa evoluzione fornirà una migliore simmetria tra questi componenti come segue:
Il Builder e il Demarshaller produrranno oggetti Python (sottoclasse di sudsobject.Object) con:
e
I Marshaller, consumando oggetti Python prodotti dal Builder o Demarshaller, sfrutteranno queste informazioni standard per produrre l'output appropriato ( XML/SOAP ).
Il codice 0.2.1 si comporta per lo più in questo modo ma ... non del tutto. Inoltre, le implementazioni hanno alcune ridondanze.
Mentre facevo questo, è sembrato opportuno estrarre la funzionalità comune di "lookup" del tipo di schema utilizzata dalle classi Builder, Marshallers e Demarshaller in una gerarchia di classi "Resolver". Questo riduce la complessità e la ridondanza delle classi Builder, Marshallers e Demarshaller e permette una migliore modularità. Una volta completato questo refactoring, la differenza tra i Marshaller letterali/codificati è diventata molto piccola. Dato che la quantità di codice nei pacchetti bindings.literal e bindings.encoded era piccola (e diventava sempre più piccola) e nell'interesse di mantenere la base di codice di Suds compatta, ho spostato tutte le classi di marshalling nel modulo bindings.marshaller. Tutti i sottopacchetti bindings.XX verranno rimossi.
L'effetto netto:
Tutti i componenti principali di Suds:
Ora hanno migliore:
... e forniscono meglio le seguenti funzionalità/correzioni di bug:
Il builder e il demarshaller usavano schema.Schema.find() per risolvere i tipi di schema. Costruivano un percorso come "person.name.first" per risolvere i tipi nel contesto appropriato. Poiché Schema.find() era senza stato, risolveva gli elementi di percorso intermedi ogni volta che veniva chiamato. I nuovi resolver hanno stato e risolvono i tipi figli in modo molto più efficiente.
Prevenisci collisioni di nomi in sudsobject.Object come il metodo items(). Ho spostato tutti i metodi (inclusi metodi di classe) in una classe Factory inclusa nella classe Object come attributo di classe ( factory ). Ora che tutti gli attributi hanno la denominazione built-in di Python, non dovremmo avere più collisioni di nomi. Questo ovviamente presuppone che nessun nome di entità wsdl/schema abbia un nome con la convenzione di denominazione built-in di Python, ma devo tracciare un limite da qualche parte :-)
versione 0.2.1 (5-8-08):
Aggiorna la sequenza di caricamento di SchemaProperty in schema.py in modo che lo schema venga caricato in 3 passaggi:
1) costruisci l'albero grezzo.
2) risolvi dipendenze come @ref e @base.
3) promuovi i nipoti come necessario per appiattire (denormalizzare) l'albero.
Il wsdl è stato modificato anche per caricare lo schema una sola volta e memorizzarlo. La raccolta di schemi è stata modificata per caricare gli schemi in 2 passaggi: 1) crea tutti gli oggetti schema grezzi. 2) carica schemi.
Questo garantisce che gli schemi locali possano essere trovati quando referenziati fuori ordine.
L'interfaccia Element di sax.py è cambiata: attribute() è stato sostituito da get() e set().
Inoltre, getitem e setitem possono essere usati per accedere ai valori degli attributi.
Epydocs aggiornati per sax.py. E ... finalmente ora supportato correttamente.
Correggi logging: NON impostandolo a info in suds.init.logger(); imposta handler solo sul logger radice; spostato logger (log) dalle classi ai moduli e usa name per il nome del logger. NOTA: Questo significa che per abilitare il logging dei messaggi SOAP: > > logger('suds.serviceproxy').setLevel(logging.DEBUG) > -- invece di -- > > logger('serviceproxy').setLevel(logging.DEBUG) >
Aggiungi supporto per nodi dello schema (xsd) che principalmente influenzano gli oggetti restituiti dal Builder.
Aggiorna serviceproxy.py:set_proxies() per loggare DEBUG invece di INFO.
Migliora schema str per mostrare sia l'xml grezzo che il modello (principalmente per debug).
versione 0.2 (04-28-08):
Contiene la prima versione dello stile soap rpc/encoded.
Sostituita la classe Property con suds.sudsobject.Object. La classe Property è stata sviluppata molto tempo fa con uno scopo leggermente diverso. L'oggetto suds è un approccio più semplice (più diretto) che richiede meno codice e funziona meglio nel debugger.
Il Binding (e la codifica) viene selezionato per ogni singolo metodo, il che è più coerente con il wsdl.
In versioni <=0.1.7, il binding veniva selezionato quando il ServiceProxy veniva costruito e usato per tutti i metodi
del servizio. Il binding era memorizzato come self.binding. Poiché il WSDL prevede uno stile di binding e una
codifica separati per ogni operazione, Suds doveva essere modificato per funzionare allo stesso modo.* I flag (nil_supported) e (faults) passati al service proxy tramite **kwargs. Oltre a questi flag, è stato aggiunto il flag (http_proxy) e viene passato all'oggetto urllib2.Request. Sono supportati i seguenti argomenti:
faults = Solleva eccezioni generate dal server (default:True), altrimenti restituisce una tupla dall'invocazione del metodo del servizio come (codice http, oggetto).nil_supported = I binding impostano xsi:nil="true" sui nodi che hanno un valore=None quando questo flag è True (default:True). Altrimenti viene inviato un nodo vuoto <x/>.proxy = Un proxy http da specificare nelle richieste (default:{}). Il proxy è definito come {protocollo:proxy,}.Supporto per proxy http (vedi sopra).
ServiceProxy rifattorizzato per delegare a un SoapClient. Poiché il service proxy espone i web service tramite getattr(), qualsiasi attributo (inclusi i metodi) fornito dalla classe ServiceProxy nasconde le operazioni WS definite dal wsdl. Quindi, spostando tutto in SoapClient, le operazioni wsdl non sono più nascoste senza dover usare nomi hoky per attributi e metodi nel service proxy. Invece, il service proxy ha gli attributi __client__ e __factory__ (che in realtà dovrebbero essere a basso rischio di collisione di nomi). Per ora i metodi get_instance() e get_enum() non sono stati spostati per preservare la retrocompatibilità. Tuttavia, la modifica API preferita sarebbe quella di sostituire:
service = ServiceProxy('myurl') person = service.get_instance('person')
... con qualcosa come ...
service = ServiceProxy('myurl') person = service.factory.get_instance('person')
Dopo alcuni rilasci che diano agli utenti il tempo di passare alla nuova API, i metodi get_instance() e get_enum() potrebbero essere rimossi con un avviso in caratteri grandi.
Risolto il problema per cui un wsdl non definisce una sezione <schema/> e Suds non riesce a risolvere i prefissi per il namespace http://www.w3.org/2001/XMLSchema per rilevare i tipi builtin come (xs:string).
versione-0.1.7 (04-08-08):
Aggiunto Binding.nil_supported per controllare come vengono elaborati i valori delle proprietà (out) = None e tag vuoti (in).
service.binding.nil_supported = True – significa che i valori delle proprietà = None vengono serializzati (out) come <x xsi:nil=true/> e <x/> viene de-serializzato come '' e <x xsi:nil/> viene de-serializzato come None.service.binding.nil_supported = False – significa che i valori delle proprietà = None vengono serializzati (out) come <x/> e <x/> e <x xsi:nil=true/> viene de-serializzato come None. Il xsi:nil viene effettivamente ignorato.Sax handler aggiornato per gestire più callback character() quando il parser sax "frammenta" il testo. Quando node.text è None, node.text viene impostato ai caratteri. Altrimenti, i caratteri vengono aggiunti. Grazie - [email protected]
Sostituito l'attributo speciale (text) con __text__ per consentire elementi naturali denominati "text"
Aggiunto supporto unicode mediante:
__unicode__ a tutte le classi con __str__str() con unicode().__str__() restituisce il risultato di __unicode__ codificato in UTF-8.Output XML codificato in UTF-8 che corrisponde all'intestazione HTTP e supporta unicode.
SchemaCollection modificato per fornire i metodi builtin() e custom(). Per supportare ciò, findPrefixes() è stato aggiunto all'Element in sax.py. Questo è comunque un approccio migliore poiché il wsdl e gli schemi possono avere molti prefissi per http://www.w3.org/2001/XMLSchema. Testato con binding doc/lit e rpc/lit
Rifattorizzati i pacchetti di binding da document & rpc a literal & encoded
Contiene il completamento del supporto completo dei namespace come segue:
<import/> dovrebbero gestire correttamente il mapping dei namespace e dei prefissi e il re-mapping come necessario.Schema.get_type() supporta percorsi con e senza prefissi ns. Quando non viene specificato alcun prefisso, il tipo viene abbinato utilizzando il target namespace dello schema.Property mantiene i nomi degli attributi (chiavi) nell'ordine in cui sono stati aggiunti. Ciò significa anche che get_item() e get_names() restituiscono valori ordinati.
(Anche se sospetto che l'ordinamento debba essere fatto nel marshaller usando l'ordine specificato nel wsdl/schema)
Importante rifattorizzazione di schema.py. L'obiettivo principale è la preparazione per ricerche di tipi completamente qualificate per namespace. Una volta completato, i prefissi sui valori degli attributi non verranno più rimossi (purged).
Riepilogo delle modifiche:
1) Le classi di overlay SchemaProperty create in __init__ invece che on-demand.
2) Le importazioni dello schema eseguite dalla nuova classe Import invece che da Schema.
3) Schema carica le proprietà di primo livello usando una factory.
4) Tutte le liste /children/ di SchemaProperty sono ordinate per __cmp__ nelle classi derivate da SchemaProperty.
Ciò garantisce che i tipi con lo stesso nome vengano risolti nel seguente ordine (Import, Complex, Simple, Element).
5) Tutte le liste /children/ di SchemaProperty sono costruite in __init__ invece che on-demand.
6) Creato SchemaGroup e aggiornata la classe WSDL. Questo funziona meglio che far aggregare al wsdl i nodi <schema/> che interrompono il collegamento con l'elemento genitore wsdl che ha il mapping dei prefissi dei namespace.
7) L'elemento <import/> viene gestito correttamente in quanto vengono eseguiti sia il re-mapping del namespace che il re-mapping del prefisso del targetNamespace dello schema importato e del relativo mapping dei prefissi.
Es: SCHEMA-A ha prefisso (tns) mappato come xmlns:tns=http://nsA e ha targetNamespace=http://nsA.
SCHEMA-B importa lo schema A e ha prefisso (abc) mappato come xmlns:abc=http://nsABC.
SCHEMA-B importa A come <import namespace=http://nsB xxx schemaLocation=http://nsA/schema-a.xsd>.
Quindi, poiché SCHEMA-B farà riferimento agli elementi di SCHEMA-A con prefisso (abc) come abc:something, il targetNamespace di SCHEMA-A deve essere aggiornato a http://nsABC e tutti gli elementi con type=tns:something devono essere aggiornati a type=abc:something in modo che possano essere risolti.
Risolto il problema di de-serializzazione per cui i nodi venivano aggiunti alla proprietà come (text, value). Questo è stato introdotto quando i binding sono stati rifattorizzati.
Risolti vari problemi di stampa di Property.
Note:
Grazie a Jesper Noehr di Coniuro per la maggior parte del binding rpc/literal e per molta collaborazione su #suds.
versione-0.1.6 (03-06-08):
<import namespace="" schemaLocation=""?>. Gli schemi referenziati vengono importati quando viene specificato uno schemaLocation.versione-0.1.5 (21-02-08):
versione-0.1.4 (21-12-07):
versione-0.1.3 (19-12-07):
bindings.Document.ReplyHint.stripns() (che usa DocumentReader.stripns()) in DocumentReader.stripn() che ora restituisce una tupla (ns,tag) come della 0.1.2.versione-0.1.2 (18-12-07):
Questa release contiene un aggiornamento a property che aggiunge:
* supporto per metadata
* override: __getitem__, __setitem__, __contans__
* cambia property(reader|writer) per usare property.metadata per gestire i namespace nei documenti XML.
* risolve i requires in setup.py.
versione-0.1.1 (17-12-07):
Questa release segna la prima release ospitata su fedora.