Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
suds — Clon de suds 0.4 + suds-0.4-CVE-2013-2217.patch | Kitploit
Herramientas/GitHubGitHub/osirium/suds
Análisis de VulnerabilidadesScripting y AutomatizaciónPruebas de Seguridad de APIsSeguridad WebUtilidades y FrameworksSeguridad de APIs
GitHubosirium/suds

suds

Clon de suds 0.4 + suds-0.4-CVE-2013-2217.patch

Ver Repositorio
hace 8 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

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:

  • Sitio del proyecto: https://fedorahosted.org/suds/
  • Documentación: https://fedorahosted.org/suds/wiki/Documentation
  • Epydocs: http://jortel.fedorapeople.org/suds/doc/

NOTAS DE LANZAMIENTO:

versión 0.3.6 (04-31-09):

  • Cambiar la ruta codificada /tmp/suds por tempfile.gettempdir() y crear suds/ bajo demanda.
  • Corregir el tipo de retorno de Any.get_attribute().
  • Actualizar la caché http para ignorar las URL file://.
  • Mejor registro de mensajes cuando solo se inyecta la respuesta.
  • Corregir los tipos XInteger y XFloat para traducir correctamente los arrays devueltos.
  • Corregir el esquema xs:import con el mismo espacio de nombres.
  • Actualizar el analizador para no cargar referencias externas y añadir Import.bind() para la ubicación de XMLSchema.xsd.
  • Añadir schema doctor: se usa para parchear XSD en tiempo de ejecución. (Ver Option.doctor)
  • Corregir avisos de deprecación en python 2.6.
  • Añadir comportamiento para @default definido en .
  • Cambiar el valor de @xsi:type para que esté siempre calificado para doc/literal. (revierte el cambio de 0.3.5).
  • Añadir la opción Option.xstq para controlar cuándo se califica @xsi:type.
  • Tickets corregidos: #64, #129, #205, #206, #217, #221, #222, #224, #225, #228, #229, #230

versión 0.3.5 (04-16-09):

  • Añade caché http. El valor predeterminado es (1) día. No se aplica a la invocación de métodos. Ver: documentación para más detalles.
  • Eliminada la comprobación de versión de fedora en el spec, ya que ya no se compila para < fc9.
  • Actualizado el makefile para generar el tarball con tar.sh.
  • Movida la determinación de bare/wrapped al wsdl para document/literal.
  • Refactorizado Transport como paquete (proporciona un mejor registro de cabeceras http).
  • Tickets corregidos: #207, #209, #210, #212, #214, #215

versión 0.3.4 (02-24-09):

  • Import.bind('http://schemas.xmlsoap.org/soap/encoding/') estático (automático), los usuarios ya no necesitan hacer esto.
  • Seguridad ws básica con {{{UsernameToken}}} y solo contraseña en texto claro.
  • Añadir soporte para cabeceras soap ''dispersas'' pasando un diccionario
  • Añadir soporte para cabeceras soap arbitrarias definidas por el usuario
  • Corrige operaciones de servicio con múltiples entradas de cabecera soap.
  • Mejoras en los algoritmos de carga y desreferenciación de esquemas.
  • Corregidas las multirefs soap anidadas.
  • Mejor soporte (real) para elementFormDefault="unqualified" que proporciona un espaciado de nombres más preciso.
  • Los tipos de parte WSDL ya no usan por defecto el targetNamespace del WSDL.
  • Tickets corregidos: #4, #6, #21, #32, #62, #66, #71, #72, #114, #155, #201.

versión 0.3.3 (11-31-08):

  • Ya no instala el paquete (tests).
  • Implementa la propuesta API-3 ( https://fedorahosted.org/suds/wiki/Api3Proposal )
    • Transporte conectable
    • Argumentos de método por palabra clave
    • Autenticación http básica en el transporte predeterminado
  • Añade normalización de prefijos de espacio de nombres en el mensaje soap.
  • Mejor poda de nodos vacíos en mensajes soap.
  • Tickets corregidos: #51 - #60

versión 0.3.2 (11-7-08):

  • Soporte SOAP {{{MultiRef}}} ''(primer paso añadido en r300)''
  • Añadir soporte para nuevas etiquetas de esquema:
    • xs:include/
    • xs:simpleContent/
    • xs:group/
    • xs:attributeGroup/
  • Añadido soporte para nuevas conversiones de tipo xs <--> python:
    • xs:int
    • xs:long
    • xs:float
    • xs:double
  • Revisar marshaller y binding para afinar aún más el espaciado de nombres de los nodos generados.
  • Corregida la recursión infinita en dereference() del paquete ''xsd'' durante la carga del esquema.
  • Añadir soporte para wsdl:import/ de archivos de esquema en la raíz del wsdl.
  • Corregir la doble codificación de (&)
  • Añadir API de Client:
    • setheaders() - igual que la palabra clave, pero funciona para todas las invocaciones.
    • addprefix() - mapeo de prefijos de espacio de nombres.
    • setlocation() - Sobrescribe la ubicación en el wsdl; igual que la palabra clave excepto para todas las llamadas.
    • setproxy() - igual que la palabra clave proxy pero para todas las invocaciones.
  • Añadir el prefijo de espacio de nombres adecuado para las cabeceras soap.
  • Tickets corregidos: #5, #12, #34, #37, #40, #44, #45, #46, #48, #49, #50, #51

versión 0.3.1 (10-1-08):

  • Seguimiento rápido del lanzamiento 0.3 que hizo que trabajar con definiciones de servicios multipuerto fuera más difícil de lo necesario. Después de reflexionar (y de dormir bien), parecía obvio que unos pocos cambios lo facilitarían mucho: 1) filtrar los bindings que no son soap: eran los que causaban el problema real; 2) dado que la mayoría de los servidores aceptan cualquiera de los bindings soap (soap 1.1 y 1.2), las referencias ambiguas a métodos al invocarlos sin la calificación de puerto funcionarán bien en casi todos los casos. Entonces, ¿por qué no permitir que suds seleccione el puerto? No hagamos que el usuario lo haga cuando no sea necesario. En la mayoría de los casos, los usuarios de 0.2.9 y anteriores no tendrán que actualizar su código al migrar a 0.3.1 como podría haber ocurrido en 0.3.

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):

  • Soporte para múltiples puertos dentro de un servicio.
  • Referencias a atributos <xs:attribute ref=""/>
  • Hacer conectable el codificador de caracteres especiales XML del paquete sax.

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):

  • Añadir detección/soporte para document/literal: envuelto y no envuelto.
  • Actualizar document/literal {wrapped} para establecer la raíz del documento (bajo ) como el elemento contenedor (con el espacio de nombres adecuado).
  • Añadir soporte para que , y tengan maxOccurs y hacer que el unmarshaller establezca como lista los valores de los elementos contenidos en una colección no acotada.
  • Actualizar client.factory (builder) para omitir los hijos de ya que el 'usuario' realmente necesita decidir qué hijos incluir.
  • Actualizar el algoritmo de aplanamiento para evitar volver a aplanar tipos de esquemas importados.
  • Ajustes en los algoritmos de aplanamiento/fusión.

versión 0.2.6 (8-5-08):

  • Corregir ENUMs rotos durante la revisión del paquete xsd.
  • Corregir el tipo tal como se define en el ticket #24.
  • Corregir nombres de parámetros duplicados en las firmas de método, según lo informado en el ticket #30.
  • Suds licenciado como LGPL.
  • Eliminar la configuración de logging en suds.init() según lo sugerido por el parche del ticket #31. Los usuarios ahora necesitarán configurar el logger.
  • Añadir soporte para la sintaxis alternativa de Client.Factory.create() para calificar completamente el tipo a construir como: {namespace}name. P. ej.: client.factory.create('{http://blabla.com/ns}Person')

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):

  • Añadido soporte para imports WSDL: wsdl:import/
  • Añadido soporte para conversiones de tipo xsd<->python (gracias: Nathan Van Gheem) para:
    • xs:date
    • xs:time
    • xs:dateTime
  • Corregido:
    • Bug: Schema con schemaLocation especificado.
    • Bug: Los espacios de nombres especificados en la descripción del servicio no son válidos hasta que se imprime el cliente/proxy.

versión 0.2.3 (7-23-08):

  • Optimizaciones.

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

    1. renombrar send() a invoke()
    2. dividir el envío de mensajes de invoke() y colocarlo en send(); Añadir TestClient que permite que los kwargs de invocación tengan inject={'msg=, and reply='} para inyección de mensaje y respuesta
  • 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:

    • faults = Lanza las faltas (faults) generadas por el servidor (por defecto:True); de lo contrario, devuelve una tupla de la invocación del método del servicio como (código http, objeto).
    • nil_supported = Los bindings establecerán xsi:nil="true" en los nodos que tengan value=None cuando este indicador sea True (por defecto:True). De lo contrario, se envía un nodo vacío .
    • proxy = Un proxy http que se especificará en las solicitudes (por defecto:{}). El proxy se define como {protocol:proxy,}
  • 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).

    • service.binding.nil_supported = True -- significa que los valores de propiedad = None se serializan (out) como y se deserializa como '' y se deserializa como None.
    • service.binding.nil_supported = False -- significa que los valores de propiedad = None se serializan (out) como y y se deserializan como None. El xsi:nil realmente se ignora.
    • EL VALOR POR DEFECTO ES (TRUE)
  • 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:

    • Añadir unicode a todas las clases con str
    • Reemplazar todas las llamadas str() por unicode().
    • str() devuelve el resultado de unicode codificado en UTF-8.
  • 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:

    • Los prefijos de espacio de nombres ya no se eliminan de los valores de atributo que hacen referencia a tipos definidos en el wsdl.
    • Los esquemas importados mediante deberían manejar correctamente el mapeo y re-mapeo de espacios de nombres y prefijos según sea necesario.
    • Todos los tipos se resuelven mediante búsquedas totalmente cualificadas (con espacios de nombres).
    • Schema.get_type() soporta rutas con y sin prefijos de ns. Cuando no se especifica un prefijo, el tipo se empareja usando el espacio de nombres objetivo del esquema.
  • 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:

root@kitploit:~
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):

  • Proporciona un manejo adecuado de wsdls que contienen secciones de esquema que incluyen importaciones de esquemas xsd: <import namespace="" schemaLocation=""?>. Los esquemas referenciados se importan cuando se especifica un schemaLocation.
  • Lanza excepciones para códigos de estado http no manejados previamente.

version-0.1.5( 02-21-08 ):

  • Proporciona un mejor registro (logging) en los módulos obteniendo el logger por nombres jerárquicos.
  • Se refactorizó según fue necesario para soportar realmente otros bindings.
  • Añade el módulo sax que reemplaza a ElementTree. Esto es más rápido, más simple y maneja los espacios de nombres (prefijos) correctamente.

version-0.1.4 (12-21-07):

  • Permite que los parámetros de los métodos del servicio sean None.
  • Añade manejo adecuado de parámetros de método que son listas de objetos property.

version-0.1.3 (12-19-07):

  • Corrige el problema en el que los nodos marcados como colección (maxOccurs > 1) no creaban objetos property con value=[] cuando se mapeaban con < 2 valores por el DocumentReader. Causado por la falta de la conversión de bindings.Document.ReplyHint.stripns() (que usa el DocumentReader.stripns()) a DocumentReader.stripn(), que ahora devuelve una tupla (ns,tag) a partir de 0.1.2.

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.

Descargar herramienta

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:

    • Builder (traduce: objetos XSD => objetos python)
    • Marshaller (traduce: objetos python => XML/SOAP)
    • Unmarshaller (traduce: soap/xml => objetos python)

    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:

    • metadata.type = tipo XSD (SchemaObject)
    • nombre de subclase ( class.name ) = nombre del tipo de esquema.

    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:

    • client (antiguo: service proxy)
    • wsdl
      • schema (paquete xsd)
      • resolvers
    • salida (marshalling)
    • builder
    • entrada (unmarshalling)

    Ahora tienen mejor:

    • modularidad
    • simetría con respecto a los metadatos de Object.
    • reutilización de código (< 1% de duplicación de código --- espero)
    • acoplamiento más flexible

    ... y proporcionan mejor soporte para las siguientes características/correcciones de bugs:

    • (corrección) Nivel adecuado de calificación de elementos XML basado en el atributo . Esto asegurará que cuando elementFormDefault="qualified", Suds incluya el espacio de nombres adecuado en los elementos raíz tanto para bindings literal como encoded. Para que esto funcione correctamente, el marshaller literal (como el marshaller encoded) necesitaba ser consciente del tipo de esquema. Si hubiera añadido el mismo lookup de tipo de esquema que el marshaller encoded en lugar de la refactorización descrita anteriormente, las dos clases habrían sido casi una duplicación completa una de la otra :-(
  • 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 :-)

  • http://www.w3.org/2001/XMLSchema