
Clon de suds 0.4 + suds-0.4-CVE-2013-2217.patch
VISIÓN GENERAL
El cliente de servicios web "Suds" es un cliente ligero basado en soap para python que está licenciado bajo LGPL.
Para más detalles, visita:
versión 0.3.6 (04-31-09):
versión 0.3.5 (04-16-09):
versión 0.3.4 (02-24-09):
versión 0.3.3 (11-31-08):
versión 0.3.2 (11-7-08):
versión 0.3.1 (10-1-08):
versión 0.3 (9-30-08):
Amplía el soporte para servicios multipuerto introducido en 0.2.9. Esta adición permite que varios servicios definan el mismo método y suds lo manejará correctamente. Ver la sección 'SERVICIOS CON MÚLTIPLES PUERTOS:'
Añade soporte para el estilo de binding document/literal multidocumento. Ver la sección 'MULTI-DOCUMENT Document/Literal:'
Añade soporte para las etiquetas (xs:group, xs:attributeGroup).
Añade Client.last_sent() y Client.last_received().
versión 0.2.9 (9-09-08):
versión 0.2.8 (8-28-08):
Actualizar el binding document/literal para enviar siempre la raíz del documento referenciada por . Después de otra revisión más del espacio y de las aportaciones de los usuarios, parece que el elemento referenciado es SIEMPRE la raíz del documento.
Añadir soporte para schemaLocations de 'binding' a namespace-uri.
Esto es para imports que no especifican un schemaLocation y aun así esperan que el esquema
se descargue. P. ej.: Axis referencia 'http://schemas.xmlsoap.org/soap/encoding/'
sin un schemaLocation. Así, haciendo esto:
from suds.xsd.sxbasic import Import. Import.bind('http://schemas.xmlsoap.org/soap/encoding/')
El esquema se vincula a un schemaLocation y se descarga.
El unmarshaller básico no necesita un /schema/. Debería haberse eliminado durante la refactorización, pero se pasó por alto.
Actualizar el cliente para pasar kwargs a send() y añadir el kwarg /location/ para sobrescribir la ubicación del servicio en el wsdl.
Actualizar el marshaller para NO emitir XML para atributos de objeto que representan elementos y/o atributos que son a la vez opcionales y value=None. * Actualizar la fábrica (builder) para incluir todos los atributos. * Añadir el método optional() a SchemaObject.
Actualizar wsdl para sobrescribir el espacio de nombres en la operación si se especifica.
Corregir problema de carga de esquemas: construir todos los esquemas antes de procesar los imports.
Actualizar el empaquetado en preparación para el envío a fedora
versión 0.2.7 (8-11-08):
versión 0.2.6 (8-5-08):
versión 0.2.5 (8-01-08):
Revisado el paquete (XSD). Este nuevo enfoque (de fusión) es más simple y debería ser más fiable y mantenible. También debería ofrecer un mejor rendimiento, ya que el esquema fusionado realiza búsquedas mediante lookup en diccionario.
Esta revisión debería corregir los problemas actuales de TypeNotFound y xs:extension/, espero :-).
Corregido el error de impresión de dateTime.
Añadida prevención de recursión infinita en builder.Builder para tipos xsd que se contienen a sí mismos.
versión 0.2.4 (7-28-08):
versión 0.2.3 (7-23-08):
versión 0.2.2 (7-8-08):
Actualizar las excepciones para que sean más /estándar/ python usando Exception.init() para establecer Exception.message, como sugiere el Ticket #14; actualizar los bindings para lanzar WebFault pasando (p)
Añadir capacidad en los bindings para manejar múltiples nodos raíz en los valores devueltos; se devuelven como un objeto compuesto, a diferencia de cuando se devuelven listas
Corregir que soapAction esté entre comillas
Añadir soporte para xs:all/
Corregir el método unbounded() en SchemaObject
Refactorizado el esquema en el nuevo paquete (xsd). Los archivos se estaban haciendo demasiado grandes. Añadido execute() a Query y adaptado suds para ejecutar query mediante execute() en lugar de usar Schema.find() directamente. Además, mover los métodos start() un tanto artificiales del esquema, así como el incremento de query.
Añadir la palabra clave inject usada para inyectar mensajes soap salientes y/o mensajes de respuesta entrantes. Refactorizar SoapClient y
Añadir la clase Namespace a sax para una mejor gestión del comportamiento de los espacios de nombres; adaptar suds para importar y usar Namespace
Cambiar el espacio de nombres predeterminado usado para resolver tipos referenciados (que tienen atributos @base="",@type="") de modo que cuando no se especifica prefijo: use el espacio de nombres XML (nodo) en lugar del targetNamespace.
Aplicar la corrección definida por [email protected] en el ticket #13
Actualizar la definición de servicio impresa para mostrar los métodos de servicio como ' my_method(xs:int arg0, Person arg1) ' en lugar de ' my_method(arg0{xs:int}, arg1{Person}) ', que se parece más a las firmas de método tradicionales
Añadir conversión de tipo xsd/python al unmarshaller (solo XBoolean); refactorizar el unmarshaller para usar la clase Content que hace que las APIs sean más limpias, añade simetría entre marshaller(s) y unmarshaller(s), y proporciona un buen mecanismo para conversiones de tipo basadas en propiedades de esquema
Refactorizar el marshaller con Appenders; añadir el flag nobuiltin a resolve() para soportar la corrección de returned_type() y returnes_collection() en los bindings.
Añadir soporte para códigos http (202,204)
versión 0.2.1 (5-8-08):
Actualizar la secuencia de carga de SchemaProperty en schema.py para que el esquema se cargue en 3 pasos: 1) construir el árbol sin procesar. 2) resolver dependencias como @ref y @base. 3) promover nietos según sea necesario para aplanar (desnormalizar) el árbol.
El wsdl también se cambió para cargar el esquema solo una vez y almacenarlo. La colección de esquemas se cambió para cargar esquemas en 2 pasos: 1) crear todos los objetos de esquema sin procesar. 2) cargar esquemas.
Esto asegura que los esquemas locales importados mediante puedan encontrarse cuando se referencian fuera de orden. La interfaz Element de sax.py cambió: attribute() reemplazada por get() y set(). Además, getitem y setitem pueden usarse para acceder a los valores de atributos. Epydocs actualizados para sax.py. Y ... por último, ahora se soporta correctamente.
corregir logging: NO establecer info en suds.init.logger(); establecer el handler solo en el root logger; mover logger (log) de las clases a los módulos y usar name como nombre del logger. NOTA: Esto significa que para habilitar el registro de mensajes soap: > > logger('suds.serviceproxy').setLevel(logging.DEBUG) > -- en lugar de -- > > logger('serviceproxy').setLevel(logging.DEBUG) >
Añadir soporte para nodos de esquema (xsd), lo que afecta principalmente a los objetos devueltos por el Builder
Actualizar serviceproxy.py:set_proxies() para registrar DEBUG en lugar de INFO.
Mejorar el str del schema para mostrar tanto el XML sin procesar como el modelo (principalmente para depuración).
versión-0.2 (04-28-08):
Contiene el primer corte del estilo soap rpc/encoded.
Reemplazada la clase Property con suds.sudsobject.Object. La clase Property se desarrolló hace mucho tiempo con un propósito ligeramente diferente. El Object de suds es un enfoque más simple (más directo) que requiere menos código y funciona mejor en el depurador.
El Binding (y la codificación) se selecciona por método, lo cual es más consistente con el wsdl. En <= 0.1.7, el binding se seleccionaba cuando se construía el ServiceProxy y se usaba para todos los métodos del servicio. El binding se almacenaba como self.binding. Dado que el WSDL proporciona un estilo de binding y una codificación separados para cada operación, Suds debía cambiarse para funcionar de la misma manera.* Los indicadores (nil_supported) y (faults) se pasan al proxy de servicio mediante **kwargs. Además de estos indicadores, se ha añadido un indicador (http_proxy) que se pasa al objeto urllib2.Request. Se admiten los siguientes argumentos:
Se admite proxy http (ver arriba).
ServiceProxy refactorizado para delegar en un SoapClient. Dado que el proxy de servicio expone los servicios web mediante getattr(), cualquier atributo (incluidos los métodos) proporcionado por la clase ServiceProxy oculta las operaciones WS definidas por el wsdl. Por lo tanto, al mover todo al SoapClient, las operaciones del wsdl ya no quedan ocultas sin tener que usar nombres hoky para atributos y métodos en el proxy de servicio. En su lugar, el proxy de servicio tiene los atributos client y factory (que realmente deberían tener bajo riesgo de colisión de nombres). Por ahora, los métodos get_instance() y get_enum() no se han movido para preservar la compatibilidad hacia atrás. Aunque el cambio de API preferido sería reemplazar:
service = ServiceProxy('myurl') person = service.get_instance('person')
... con algo como ...
service = ServiceProxy('myurl') person = service.factory.get_instance('person')
Después de algunas versiones que den tiempo a los usuarios para cambiar a la nueva API, los métodos get_instance() y get_enum() pueden eliminarse con un aviso en letras grandes.
Se corrigió el problema cuando un wsdl no define una sección y Suds no puede resolver los prefijos para el espacio de nombres con el fin de detectar tipos integrados como (xs:string).
version-0.1.7 (04-08-08):
Se añadió Binding.nil_supported para controlar cómo se procesan los valores de propiedad (out) = None y la etiqueta vacía (in).
Se actualizó el manejador Sax para gestionar múltiples callbacks character() cuando el parser sax divide el texto en fragmentos. Cuando node.text es None, node.text se establece a los caracteres. De lo contrario, los caracteres se añaden. Gracias - [email protected]
Se reemplazó el atributo especial (text) por text para permitir elementos naturales llamados "text"
Se añadió soporte unicode:
La salida XML se codifica como UTF-8, lo que coincide con la cabecera HTTP y soporta unicode.
SchemaCollection se modificó para proporcionar los métodos builtin() y custom(). Para soportar esto, se añadió findPrefixes() al Element en sax.py. Este es un mejor enfoque de todos modos, ya que el wsdl y los esquemas pueden tener muchos prefijos para http://www.w3.org/2001/XMLSchema. Probado con bindings doc/lit y rpc/lit.
Se refactorizaron los paquetes de bindings de document & rpc a literal & encoded
Contiene la finalización del soporte completo de espacios de nombres, como sigue:
Property mantiene los nombres de atributos (claves) en el orden en que se añaden. Esto también significa que get_item() y get_names() devuelven valores ordenados. ( Aunque sospecho que el orden realmente debería hacerse en el marshaller usando el orden especificado en el wsdl/schema )
Gran refactorización de schema.py. El objetivo principal es la preparación para búsquedas de tipos totalmente cualificadas por espacio de nombres. Una vez completado, los prefijos en los valores de atributo ya no se eliminarán (purgarán). Resumen de cambios: 1) Las clases overlay de SchemaProperty se crean en init en lugar de bajo demanda. 2) Las importaciones de esquemas las realiza la nueva clase Import en lugar de Schema. 3) Schema carga las propiedades de nivel superior usando una fábrica. 4) Todas las listas /children/ de SchemaProperty se ordenan por cmp en las clases derivadas de SchemaProperty. Esto asegura que los tipos con el mismo nombre se resuelvan en el siguiente orden (Import, Complex, Simple, Element). 5) Todas las listas /children/ de SchemaProperty se construyen en init en lugar de bajo demanda. 6) Se creó SchemaGroup y se actualizó la clase WSDL. Esto funciona mejor que hacer que el wsdl agregue los nodos lo que corta el enlace con el elemento padre del wsdl que tiene el mapeo de prefijos de espacio de nombres. 7) El elemento se maneja correctamente, realizando tanto el re-mapeo del espacio de nombres como el re-mapeo de prefijos del targetNamespace del esquema importado y su mapeo de prefijos asociado. Ej: SCHMEA-A tiene el prefijo (tns) mapeado como xmlns:tns=http://nsA y tiene targetNamespace=http://nsA. SCHEMA-B importa el esquema A y tiene el prefijo (abc) mapeado como xmlns:abc=http://nsABC. SCHEMA-B importa A como <import namespace=http://nsB xxx schemaLocation=http://nsA/schema-a.xsd>. Entonces, dado que SCHEMA-B hará referencia a elementos de SCHEMA-A con el prefijo (abc) como abc:something, el targetNamespace de SCHEMA-A debe actualizarse como http://nsABC y todos los elementos con type=tns:something deben actualizarse a type=abc:something para que puedan resolverse.
Corrige el problema de deserialización (unmarshalling) en el que los nodos se añaden a la propiedad como (text, value). Esto se introdujo cuando se refactorizaron los bindings.
Se corrigieron varios problemas de impresión de Property.
Notas:
Gracias a Jesper Noehr de Coniuro por la mayor parte del binding rpc/literal y
por mucha colaboración en #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):
Esta versión contiene una actualización de los añadidos de property: * soporte de metadatos * anulaciones: getitem, setitem, contans * cambia property(reader|writer) para usar property.metadata y manejar espacios de nombres en documentos XML. * corrige los requisitos de setup.py.
version-0.1.1 (12-17-07):
Esta versión marca el primer lanzamiento en fedora hosted.
Añadir XBoolean y mapeos; añadir findattr() a TreeResolver en preparación para las conversiones de tipo
Actualizadas la carga de esquemas y de propiedades de esquema (detenida la recursión profunda); cambiados los esquemas importados para que ya no copien esquemas importados, sino que el import actúa como proxy de las solicitudes de búsqueda; añadida la clase ServiceDefinition que proporciona una mejor inspección del servicio; también proporciona mapeo de espacios de nombres y muestra tipos; API de propiedades de esquema simplificada; soporte para xs:any y xs:anyType añadido; algunos problemas de búsqueda de esquemas corregidos; clases Binding refactorizadas ligeramente; mucho logging de depuración añadido (puede que haya que comentar parte por rendimiento: algunos de los args son caros).
Añadir sudsobject.Property; una propiedad es un Object especial que contiene un atributo (value) y es devuelto por el Builder (factory) para tipos de esquema sin hijos, como: y ; Builder, Marshallers y Resolvers actualizados para manejar Properties; Resolver y Schema también actualizados para manejar búsquedas de atributos (esto faltaba)
Añadir las bases para cabeceras soap definidas por el usuario.
Corregir elementFormDefault según el ticket #7
Eliminar kwargs no utilizados de los bindings; cachear bindings en wsdl; adaptar el legacy ServiceProxy para delegar en la {nueva} API de Client; eliminar la palabra clave nil_supported a favor del manejo natural mediante el atributo 'nillable' en dentro de los esquemas
Añadir soporte para los flags de atributo de (nillable y form)
Añadir la clase Proxy (API de 2ª generación)
Añadir funciones de acceso/conversión para que el usuario no necesite acceder a atributos x. Añadir también todict() y get_items() para facilitar la conversión a diccionario y la iteración
Buscar elementos de nivel superior por @ref antes de buscar más profundamente
Añadir derived() a SchemaObject. Esto es necesario para asegurar que todos los tipos derivados (clases wsdl) estén calificados por xsi:type sin especificar el xsi:type para todos los tipos personalizados como se hacía en versiones anteriores de suds. Actualizar el marshaller literal para añadir el xsi:type solo cuando el tipo necesite ser especificado.
Cambiar la promoción de ns en sax para evitar que el ns se promueva al padre cuando el padre tiene el prefijo.
Cambiado returned_type() de binding para devolver el Element (sin resolver)
Con el fin de soportar las nuevas características y corregir bugs reportados, estoy en proceso de refactorizar y, con suerte, evolucionar los componentes de Suds que proporcionan las traducciones de entrada/salida:
Esta evolución proporcionará una mejor simetría entre estos componentes de la siguiente manera:
El Builder y el Unmarshaller producirán objetos python (subclase de sudsobject.Object) con:
y
Los Marshaller(s), al consumir objetos python producidos por el Builder o el Unmarshaller, aprovecharán esta información estándar para producir la salida adecuada ( XML/SOAP ).
El código 0.2.1 se comporta en su mayoría así pero ... no del todo. Además, las implementaciones tienen cierta redundancia.
Al hacer esto, tenía sentido extraer la funcionalidad común de "lookup" de tipos de esquema utilizada por las clases Builder, Marshallers y Unmarshaller a una jerarquía de clases "Resolver". Esto reduce la complejidad y la redundancia de las clases Builder, Marshallers y Unmarshaller y permite una mejor modularidad. Una vez completada esta refactorización, la diferencia entre los Marshallers literal/encoded se volvió muy pequeña. Dado que la cantidad de código en los paquetes bindings.literal y bindings.encoded era pequeña (y cada vez menor) y en interés de mantener compacta la base de código de Suds, moví todas las clases de marshalling al módulo bindings.marshaller. Todos los subpaquetes bindings.XX serán eliminados.
El efecto neto:
Todos los componentes principales de Suds:
Ahora tienen mejor:
... y proporcionan mejor soporte para las siguientes características/correcciones de bugs:
El builder y el unmarshaller usaban schema.Schema.find() para resolver tipos de esquema. Construían una ruta como "person.name.first" para resolver tipos en el contexto adecuado. Como Schema.find() no tenía estado, resolvía los elementos de ruta intermedios en cada llamada. Las nuevas clases resolver tienen estado y resuelven los tipos hijos mucho más eficientemente.
Prevenir colisiones de nombres en sudsobject.Object como el método items(). He movido todos los métodos (incluidos los métodos de clase) a una clase Factory que está incluida en la clase Object como atributo de clase ( factory ). Ahora que todos los atributos tienen nombres de built-ins de python, no deberíamos tener más colisiones de nombres. Esto, por supuesto, asume que ningún nombre de entidad wsdl/schema tendrá un nombre con la convención de nombres de built-ins de python, pero tengo que trazar la línea en alguna parte :-)