
Clone de suds 0.4 + suds-0.4-CVE-2013-2217.patch
APERÇU
Le client de services web « Suds » est un client SOAP léger pour Python sous licence LGPL.
Pour plus de détails, visitez :
version 0.3.6 (04-31-09) :
version 0.3.5 (04-16-09) :
version 0.3.4 (02-24-09) :
version 0.3.3 (11-31-08) :
version 0.3.2 (11-7-08) :
version 0.3.1 (10-1-08) :
version 0.3 (9-30-08) :
Étend la prise en charge des services multi-ports introduite dans 0.2.9. Cet ajout permet à plusieurs services de définir la même méthode et suds la gérera correctement. Voir la section 'SERVICES WITH MULTIPLE PORTS:'
Ajout de la prise en charge du style de liaison SOAP document/literal multi-document. Voir la section 'MULTI-DOCUMENT Docuemnt/Literal:'
Ajout de la prise en charge des balises (xs:group, xs:attributeGroup).
Ajout de Client.last_sent() et Client.last_received().
version 0.2.9 (9-09-08) :
version 0.2.8 (8-28-08) :
Mise à jour de la liaison document/literal pour toujours envoyer la racine du document référencée par . Après un énième examen de l'espace et des retours utilisateurs, il semble que l'élément référencé est TOUJOURS la racine du document.
Ajout de la prise en charge des schemaLocations de 'binding' vers namespace-uri.
Ceci concerne les importations qui ne spécifient pas de schemaLocation et attendent néanmoins que le schéma
soit téléchargé. Ex : Axis référence 'http://schemas.xmlsoap.org/soap/encoding/'
sans schemaLocation. Ainsi, en faisant ceci :
from suds.xsd.sxbasic import Import. Import.bind('http://schemas.xmlsoap.org/soap/encoding/')
Le schéma est lié à une schemaLocation et il est téléchargé.
Le unmarshaller de base n'a pas besoin de /schema/. Il aurait dû être supprimé lors de la refactorisation mais a été oublié.
Mise à jour du client pour passer des kwargs à send() et ajout du kwarg /location/ pour remplacer l'emplacement du service dans le wsdl.
Mise à jour du marshaller pour NE PAS émettre de XML pour les attributs d'objet qui représentent des éléments et/ou attributs à la fois facultatifs et de valeur None. * Mise à jour de la fabrique (builder) pour inclure tous les attributs. * Ajout de la méthode optional() à SchemaObject.
Mise à jour du wsdl pour remplacer l'espace de noms dans l'opération s'il est spécifié.
Correction du problème de chargement du schéma - construire tous les schémas avant de traiter les importations.
Mise à jour du packaging en préparation de la soumission à fedora
version 0.2.7 (8-11-08) :
version 0.2.6 (8-5-08) :
version 0.2.5 (8-01-08) :
Refonte du package (XSD). Cette nouvelle approche (par fusion) est plus simple et devrait être plus fiable et maintenable. Elle devrait également offrir de meilleures performances puisque le schéma fusionné effectue des recherches via dictionnaire.
Cette refonte devrait corriger les problèmes actuels de TypeNotFound et de xs:extension/, je l'espère :-).
Correction du bug d'impression de dateTime.
Ajout de la prévention de récursion infinie dans builder.Builder pour les types xsd qui se contiennent eux-mêmes.
version 0.2.4 (7-28-08) :
version 0.2.3 (7-23-08) :
version 0.2.2 (7-8-08) :
Mise à jour des exceptions pour qu'elles soient plus /standard/ en Python en utilisant Exception.init() pour définir Exception.message comme suggéré par le Ticket #14 ; mise à jour des liaisons pour lever WebFault en passant (p)
Ajout de la capacité dans les liaisons à gérer plusieurs nœuds racines dans les valeurs renvoyées ; renvoyées comme un objet composite contrairement aux listes renvoyées
Correction de soapAction pour qu''il soit entre guillemets
Ajout de la prise en charge de xs:all/
Correction de la méthode unbounded() dans SchemaObject
Refactorisation du schéma dans le nouveau package (xsd). Les fichiers devenaient tout simplement trop volumineux. Ajout de execute() à
Query et adaptation de suds pour exécuter la requête via execute() au lieu d'utiliser directement Schema.find().
Déplacement également des méthodes start() peu fiables du schéma, ainsi que de l'incrémentation des requêtes.
Ajout du mot-clé inject utilisé pour injecter des messages SOAP sortants et/ou des messages de réponse entrants. Refactoriser SoapClient :
Ajout de la classe Namespace à sax pour une meilleure gestion du comportement des espaces de noms ; adaptation de suds pour importer et utiliser Namespace
Modification de l'espace de noms par défaut utilisé pour résoudre les types référencés (ayant les attributs @base="", @type="") afin que lorsqu'aucun préfixe n'est spécifié : l'espace de noms XML (nœud) soit utilisé à la place du targetNamespace.
Application du correctif tel que défini par [email protected] dans le ticket #13
Mise à jour de la définition de service pour afficher les méthodes de service comme ' my_method(xs:int arg0, Person arg1) ' au lieu de ' my_method(arg0{xs:int}, arg1{Person}) ' qui ressemble davantage aux signatures de méthodes traditionnelles
Ajout de la conversion de types xsd/python au unmarshaller (XBoolean uniquement) ; refactorisation du unmarshaller pour utiliser la classe Content qui rend les API plus propres, ajoute une symétrie entre marshaller(s) et unmarshaller(s), fournit un bon mécanisme pour les conversions de types basées sur les propriétés du schéma
Refactorisation du marshaller avec Appenders ; ajout du drapeau nobuiltin à resolve() pour prendre en charge le correctif de returned_type() et returnes_collection() dans les liaisons.
Ajout de la prise en charge des codes HTTP (202,204)
Ajout de XBoolean et des mappages ; ajout de findattr() à TreeResolver en préparation des conversions de types
Mise à jour du chargement du schéma et des propriétés du schéma (arrêt de la récursion profonde) ; modification des schémas importés afin qu''ils ne copient plus les schémas importés, mais que l''importation représente des requêtes de recherche ; ajout de la classe ServiceDefinition qui offre une meilleure inspection du service ; fournit également le mappage des espaces de noms et l''affichage des types ; simplification de l''API des propriétés de schéma ; ajout de la prise en charge de xs:any et xs:anyType ; correction de certains problèmes de recherche de schéma ; légère refactorisation des classes Binding ; ajout de beaucoup de journalisation de débogage (il faudra peut-être en commenter une partie pour la performance - certains arguments sont coûteux).
Ajout de sudsobject.Property ; une propriété est un Object spécial qui contient un attribut (value) et est renvoyé par le Builder (factory) pour les types de schéma sans enfants tels que : et ; mise à jour de Builder, Marshallers et Resolvers pour gérer les propriétés ; Resolver et Schema également mis à jour pour gérer les recherches d''attributs (ce qui manquait)
Ajout des fondations pour les en-têtes SOAP définis par l'utilisateur.
Correction de elementFormDefault selon le ticket #7
Suppression des kwargs inutilisés des liaisons ; mise en cache des liaisons dans wsdl ; adaptation de l'ancien ServiceProxy pour déléguer à la {nouvelle} API Client ; suppression du mot-clé nil_supported au profit de la gestion naturelle par l'attribut 'nillable' sur dans les schémas
Ajout de la prise en charge des attributs de drapeau de (nillable et form)
Ajout de la classe Proxy (API de 2e génération)
Ajout de fonctions d'accès/conversion pour que l'utilisateur n'ait pas besoin d'accéder aux attributs x. Ajout également de todict() et get_items() pour faciliter la conversion en dictionnaire et l'itération
Recherche des éléments de niveau supérieur pour @ref avant d'aller plus loin
Ajout de derived() à SchemaObject. Ceci est nécessaire pour garantir que tous les types dérivés (classes wsdl) sont qualifiés par xsi:type sans spécifier le xsi:type pour tous les types personnalisés comme c'était le cas dans les versions antérieures de suds. Mise à jour du marshaller littéral pour n'ajouter le xsi:type que lorsque le type doit être spécifié.
Modification de la promotion ns dans sax pour empêcher la promotion du ns vers le parent lorsque le parent possède le préfixe.
Modification de returned_type() des liaisons pour renvoyer l'élément (non résolu) Element
Afin de prendre en charge les nouvelles fonctionnalités et de corriger les bugs signalés, je suis en train de refactoriser et, je l'espère, de faire évoluer les composants de Suds qui assurent les traductions entrée/sortie :
Cette évolution offrira une meilleure symétrie entre ces composants comme suit :
Le Builder et l'Unmarshaller produiront des objets python (sous-classe de sudsobject.Object) avec :
et
Le(s) Marshaller(s), tout en consommant les objets python produits par le Builder ou l'Unmarshaller, exploiteront ces informations standard pour produire la sortie appropriée ( XML/SOAP ).
Le code 0.2.1 se comporte en grande partie ainsi mais ... pas tout à fait. De plus, les implémentations présentent des redondances.
En faisant cela, il était logique d'extraire la fonctionnalité commune de « recherche » de type de schéma utilisée par les classes Builder, Marshallers et Unmarshaller dans une hiérarchie de classes « Resolver ». Cela réduit la complexité et la redondance des classes Builder, Marshallers et Unmarshaller et permet une meilleure modularité. Une fois cette refactorisation terminée, la différence entre les Marshallers littéral/encodé est devenue très faible. Étant donné que la quantité de code dans les packages bindings.literal et bindings.encoded était faible (et diminuait) et dans un souci de compacité de la base de code de Suds, j'ai déplacé toutes les classes de marshalling vers le module bindings.marshaller. Tous les sous-packages bindings.XX seront supprimés.
L'effet net :
Tous les composants majeurs de Suds :
Désormais mieux :
... et mieux prendre en charge les fonctionnalités/correctifs suivants :
Le builder et l'unmarshaller utilisaient schema.Schema.find() pour résoudre les types de schéma. Ils construisaient un chemin comme « person.name.first » pour résoudre les types dans le contexte approprié. Comme Schema.find() était sans état, il résolvait les éléments de chemin intermédiaires à chaque appel. Les nouvelles classes resolver sont avec état et résolvent les types enfants beaucoup plus efficacement.
Prévention des collisions de noms dans sudsobject.Object comme la méthode items(). J'ai déplacé toutes les méthodes (y compris les méthodes de classe) vers une classe Factory incluse dans la classe Object comme attribut de classe ( factory ). Maintenant que tous les attributs respectent la convention de nommage intégrée de Python, nous ne devrions plus avoir de collisions de noms. Cela suppose bien sûr qu'aucun nom d'entité wsdl/schema n'aura un nom utilisant la convention de nommage intégrée de Python, mais il faut bien s'arrêter quelque part :-)
version 0.2.1 (5-8-08) :
Mise à jour de la séquence de chargement de SchemaProperty dans schema.py afin que le schéma soit chargé en 3 étapes :
1) construire l'arbre brut.
2) résoudre les dépendances telles que @ref et @base.
3) remonter les petits-enfants si nécessaire pour aplatir (dénormaliser) l'arbre.
Le wsdl a également été modifié pour ne charger le schéma qu'une seule fois et le stocker. La collection de schémas a été modifiée pour charger les schémas en 2 étapes : 1) créer tous les objets de schéma bruts. 2) charger les schémas.
Cela garantit que les schémas 'd locaux peuvent être trouvés lorsqu'ils sont référencés hors ordre.
L'interface Element de sax.py a changé : attribute() remplacé par get() et set().
De plus, getitem et setitem peuvent être utilisés pour accéder aux valeurs d'attributs.
Epydocs mis à jour pour sax.py. Et ... le dernier est désormais correctement pris en charge.
Correction de la journalisation en : ne définissant PAS info dans suds.init.logger() ; configuration du handler uniquement sur le logger racine ; déplacement du logger (log) des classes vers les modules et utilisation de name comme nom de logger. REMARQUE : Cela signifie que pour activer la journalisation des messages SOAP : > > logger('suds.serviceproxy').setLevel(logging.DEBUG) > -- au lieu de -- > > logger('serviceproxy').setLevel(logging.DEBUG) >
Ajout de la prise en charge des nœuds d'attribut du schéma (xsd), ce qui affecte principalement les objets renvoyés par le Builder
Mise à jour de serviceproxy.py:set_proxies() pour journaliser en DEBUG au lieu de INFO.
Amélioration de schema.str pour afficher à la fois le xml brut et le modèle (principalement pour le débogage).
version-0.2 (04-28-08) :
Contient la première ébauche du style soap rpc/encoded.
Remplacement de la classe Property par suds.sudsobject.Object. La classe Property a été développée il y a longtemps avec un but légèrement différent. L'objet suds est une approche plus simple (plus directe) qui nécessite moins de code et fonctionne mieux dans le débogueur.
La liaison (et l'encodage) est sélectionnée par méthode, ce qui est plus cohérent avec le wsdl. Dans <= 0.1.7, la liaison était sélectionnée lors de la construction du ServiceProxy et utilisée pour toutes les méthodes du service. La liaison était stockée comme self.binding. Étant donné que le WSDL fournit un style de liaison et un encodage distincts pour chaque opération, Suds devait être modifié pour fonctionner de la même manière.* Les indicateurs (nil_supported) et (faults) passés au proxy de service via **kwargs. En plus de ces indicateurs, un indicateur (http_proxy) a été ajouté et est passé à l'objet urllib2.Request. Les arguments suivants sont pris en charge :
ServiceProxy refactorisé pour déléguer à un SoapClient. Étant donné que le proxy de service expose les services web via getattr(), tout attribut (y compris les méthodes) fourni par la classe ServiceProxy masque les opérations WS définies par le wsdl. Ainsi, en déplaçant tout vers SoapClient, les opérations wsdl ne sont plus masquées sans avoir à utiliser des noms bizarres pour les attributs et méthodes du proxy de service. À la place, le proxy de service possède des attributs client et factory (qui devraient vraiment présenter un faible risque de collision de noms). Pour l'instant, les méthodes get_instance() et get_enum() n'ont pas été déplacées afin de préserver la rétrocompatibilité. Cependant, le changement d'API préféré serait de remplacer :
service = ServiceProxy('myurl') person = service.get_instance('person')
... par quelque chose comme ...
service = ServiceProxy('myurl') person = service.factory.get_instance('person')
Après quelques versions laissant le temps aux utilisateurs de basculer vers la nouvelle API, les méthodes get_instance() et get_enum() pourront être supprimées avec un avis en grosses lettres.
Corrige le problème où un wsdl ne définit pas de section et Suds ne peut pas résoudre les préfixes de l'espace de noms http://www.w3.org/2001/XMLSchema pour détecter les types intégrés tels que (xs:string).
version-0.1.7 (04-08-08):
Ajout de Binding.nil_supported pour contrôler la manière dont les valeurs de propriété (sortie) = None et les balises vides (entrée) sont traitées.
Le gestionnaire Sax a été mis à jour pour gérer de multiples rappels character() lorsque le parseur sax « fragmente » le texte. Lorsque node.text est None, node.text est défini avec les caractères. Sinon, les caractères sont ajoutés. Merci - [email protected]
Remplacement de l'attribut spécial (text) par text pour permettre des éléments naturels nommés « text »
Ajout du support unicode en :
Sortie XML encodée en UTF-8, ce qui correspond à l'en-tête HTTP et prend en charge unicode.
SchemaCollection modifié pour fournir les méthodes builtin() et custom(). Pour ce faire, findPrefixes() a été ajouté à l'élément Element dans sax.py. C'est de toute façon une meilleure approche puisque le wsdl et les schémas peuvent avoir de nombreux préfixes vers http://www.w3.org/2001/XMLSchema. Testé avec les bindings doc/lit et rpc/lit.
Paquets de bindings refactorisés de document & rpc vers literal & encoded
Contient l'achèvement du support complet des espaces de noms comme suit :
Property conserve les noms d'attributs (clés) dans l'ordre d'ajout. Cela signifie également que get_item() et get_names() retournent des valeurs ordonnées. ( Bien que je soupçonne que l'ordonnancement doive en réalité être effectué dans le marshaller en utilisant l'ordre spécifié dans le wsdl/schema )
Refactorisation majeure de schema.py. L'objectif principal est la préparation de recherches de types entièrement qualifiés par espace de noms. Une fois terminé, les préfixes sur les valeurs d'attributs ne seront plus supprimés (purgés). Résumé des modifications : 1) Les classes de surcouche SchemaProperty créées à init au lieu d'à la demande. 2) Les imports de schémas effectués par la nouvelle classe Import au lieu de Schema. 3) Schema charge les propriétés de premier niveau à l'aide d'une fabrique. 4) Toutes les listes /children/ de SchemaProperty sont triées par cmp dans les classes dérivées de SchemaProperty. Cela garantit que les types portant le même nom sont résolus dans l'ordre suivant (Import, Complex, Simple, Element). 5) Toutes les listes /children/ de SchemaProperty sont construites à init au lieu d'à la demande. 6) La classe SchemaGroup a été créée et la classe WSDL mise à jour. Cela fonctionne mieux que de faire agréger par le wsdl les nœuds qui rompent la liaison avec l'élément parent du wsdl possédant le mapping des préfixes d'espaces de noms. 7) L'élément est géré correctement dans la mesure où le re-mapping de l'espace de noms et le re-mapping du préfixe du targetNamespace du schéma importé et du mapping de préfixe associé - sont effectués. Ex. : SCHMEA-A a un préfixe (tns) mappé comme xmlns:tns=http://nsA et a targetNamespace=http://nsA. SCHEMA-B importe le schéma A et a un préfixe (abc) mappé comme xmlns:abc=http://nsABC. SCHEMA-B importe A comme <import namespace=http://nsB xxx schemaLocation=http://nsA/schema-a.xsd>. Ainsi, puisque SCHEMA-B fera référence aux éléments de SCHEMA-A avec le préfixe (abc) tel que abc:something, le targetNamespace de SCHEMA-A doit être mis à jour comme http://nsABC et tous les éléments avec type=tns:something doivent être mis à jour pour être type=abc:something afin de pouvoir être résolus.
Corrige le problème de désérialisation où les nœuds sont ajoutés à la propriété comme (text, value). Cela a été introduit lorsque les bindings ont été refactorisés.
Corrigé divers problèmes d'impression de Property.
Notes :
Merci à Jesper Noehr de Coniuro pour la majorité du binding rpc/literal et
pour de nombreuses collaborations sur #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):
Cette version contient une mise à jour des ajouts property : * support des métadonnées * surcharges : getitem, setitem, contans * modifie property(reader|writer) pour utiliser property.metadata afin de gérer les espaces de noms pour les documents XML. * corrige les requires de setup.py.
version-0.1.1 (12-17-07):
Cette version marque la première publication sur Fedora Hosted.