
Clone do suds 0.4 + suds-0.4-CVE-2013-2217.patch
VISÃO GERAL
O cliente de serviços web "Suds" é um cliente leve baseado em SOAP para python que é licenciado sob LGPL.
Para detalhes, visite:
versão 0.3.6 (04-31-09):
versão 0.3.5 (04-16-09):
versão 0.3.4 (02-24-09):
versão 0.3.3 (11-31-08):
versão 0.3.2 (11-7-08):
versão 0.3.1 (10-1-08):
versão 0.3 (9-30-08):
Estende o suporte para serviços multi-porta introduzido no 0.2.9. Esta adição fornece a capacidade para múltiplos serviços definirem o mesmo método e o suds lidará com isso adequadamente. Veja a seção 'SERVIÇOS COM MÚLTIPLAS PORTAS:'
Adicionar suporte para estilo de binding soap document/literal multi-documento. Veja a seção 'MULTI-DOCUMENTO Docuemnt/Literal:'
Adicionar suporte para tags (xs:group, xs:attributeGroup).
Adicionar Client.last_sent() e Client.last_received().
versão 0.2.9 (9-09-08):
versão 0.2.8 (8-28-08):
Atualizar binding document/literal para sempre enviar a raiz do documento referenciada pelo . Após mais uma revisão do espaço e entrada do usuário, parece que o elemento referenciado é SEMPRE a raiz do documento.
Adicionar suporte para associar 'binding' schemaLocations a namespace-uri.
Isto é para imports que não especificam um schemaLocation e ainda esperam que o esquema
seja baixado. Ex: Axis referencia 'http://schemas.xmlsoap.org/soap/encoding/'
sem um schemaLocation. Então, fazendo isto:
from suds.xsd.sxbasic import Import. Import.bind('http://schemas.xmlsoap.org/soap/encoding/')
O esquema é associado a um schemaLocation e é baixado.
Unmarshaller básico não precisa de um /schema/. Deveria ter sido removido durante a refatoração, mas foi esquecido.
Atualizar cliente para passar kwargs para send() e adicionar kwarg /location/ para substituir a localização do serviço no wsdl.
Atualizar marshaller para NÃO emitir XML para atributos de objeto que representam elementos e/ou atributos que são ambos opcionais e value=None. * Atualizar factory (builder) para incluir todos os atributos. * Adicionar método optional() a SchemaObject.
Atualizar wsdl para substituir namespace em operação se especificado.
Corrigir problema de carregamento de esquema - construir todos os esquemas antes de processar imports.
Atualizar empacotamento em preparação para submissão ao fedora
versão 0.2.7 (8-11-08):
versão 0.2.6 (8-5-08):
versão 0.2.5 (8-01-08):
Reforma completa do pacote (XSD). Esta nova abordagem (merging) é mais simples e deve ser mais confiável e sustentável. Além disso, deve fornecer melhor desempenho já que o esquema mesclado realiza buscas via dicionário.
Esta reforma deve corrigir os problemas atuais de TypeNotFound e xs:extension/, espero :-).
Corrigido bug de impressão de dateTime.
Adicionada prevenção de recursão infinita no builder.Builder para tipos xsd que contêm a si mesmos.
versão 0.2.4 (7-28-08):
versão 0.2.3 (7-23-08):
versão 0.2.2 (7-8-08):
Atualizar exceções para serem mais /padrão/ do python usando Exception.init() para definir Exception.message conforme sugerido pelo Ticket #14; atualizar bindings para levantar WebFault passando (p)
Adicionar capacidade nas bindings para lidar com múltiplos nós raiz nos valores retornados; retornados como um objeto composto, ao contrário de quando listas são retornadas
Corrigir soapAction para ser delimitado por aspas
Adicionar suporte para xs:all/
Corrigir método unbounded() em SchemaObject
Refatorar esquema para novo pacote (xsd). Arquivos estavam ficando grandes demais. Adicionado execute() a
Query e retrofitado suds para executar() query em vez de usar Schema.find() diretamente.
Além disso, mover métodos start() confusos do esquema, bem como a incrementação de query.
Adicionar palavra-chave inject usada para injetar mensagens soap de saída e/ou mensagens de resposta de entrada. Refatorar SoapClient e
Adicionar classe Namespace ao sax para melhor gerenciamento do comportamento de namespace; retrofitado suds para importar e usar Namespace
Alterar o namespace padrão usado para resolver tipos referenciados (com atributos @base="",@type="") para que quando nenhum prefixo for especificado: use o namespace do nó XML em vez do targetNamespace.
Aplicar correção conforme definido por [email protected] no ticket #13
Atualizar definição de serviço para imprimir e exibir métodos de serviço como ' my_method(xs:int arg0, Person arg1) ' em vez de ' my_method(arg0{xs:int}, arg1{Person}) ' que é mais parecido com assinaturas de método tradicionais
Adicionar conversão de tipo xsd/python ao unmarshaller (XBoolean apenas); refatorar unmarshaller para usar Content class que torna APIs mais limpas, adiciona simetria entre marshaller(s) e unmarshaller(s), fornece bom mecanismo para conversões de tipo baseadas em propriedades de esquema
Refatorar marshaller com Appenders; adicionar flag nobuiltin para resolve() para suportar correção de returned_type() e returnes_collection() em bindings.
Adicionar suporte para códigos http (202,204)
Adicionar XBoolean e mapeamentos; adicionar findattr() a TreeResolver em preparação para conversões de tipo
versão 0.2.1 (5-8-08):
Atualizar a sequência de carregamento de SchemaProperty em schema.py para que o esquema seja carregado em 3 etapas:
1) construir a árvore bruta.
2) resolver dependências como @ref e @base.
3) promover netos conforme necessário para achatar (desnormalizar) a árvore.
O wsdl também foi alterado para carregar o esquema apenas uma vez e armazená-lo. A coleção de esquemas foi alterada para carregar esquemas em 2 etapas: 1) criar todos os objetos de esquema brutos. 2) carregar esquemas.
Isso garante que esquemas locais 'd possam ser encontrados quando referenciados fora de ordem.
A interface Element do sax.py mudou: attribute() substituído por get() e set().
Além disso, getitem e setitem podem ser usados para acessar valores de atributo.
Epydocs atualizados para sax.py. E ... finalmente agora suportado adequadamente.
corrigir logging: NÃO configurando para info em suds.init.logger(); definir handler no logger raiz apenas; movido logger (log) de classes para módulos e usado name para nome do logger. NOTA: Isso significa que para habilitar logging de mensagens soap: > > logger('suds.serviceproxy').setLevel(logging.DEBUG) > -- em vez de -- > > logger('serviceproxy').setLevel(logging.DEBUG) >
Adicionar suporte para nós do esquema (xsd) que afeta principalmente objetos retornados pelo Builder
Atualizar serviceproxy.py:set_proxies() para logar DEBUG em vez de INFO.
Melhorar str do esquema para mostrar tanto o xml bruto quanto o modelo (principalmente para depuração).
versão-0.2 (04-28-08):
Contém o primeiro corte do estilo soap rpc/encoded.
Substituída a classe Property por suds.sudsobject.Object. A classe Property foi desenvolvida há muito tempo com um propósito ligeiramente diferente. O suds Object é uma abordagem mais simples (mais direta) que requer menos código e funciona melhor no depurador.
A Binding (e a codificação) é selecionada por método, o que é mais consistente com o wsdl. Em <= 0.1.7, a binding era selecionada quando o ServiceProxy era construído e usada para todos os métodos do serviço. A binding era armazenada como self.binding. Como o WSDL fornece um estilo de binding e codificação separados para cada operação, o Suds precisava ser alterado para funcionar da mesma forma.* Os sinalizadores (nil_supported) e (faults) passados para o proxy de serviço usando **kwargs. Além desses sinalizadores, um sinalizador (http_proxy) foi adicionado e passado para o objeto urllib2.Request. Os seguintes argumentos são suportados:
Proxy HTTP suportado (veja acima).
ServiceProxy refatorado para delegar a um SoapClient. Como o proxy de serviço expõe serviços web via getattr(), qualquer atributo (incluindo métodos) fornecido pela classe ServiceProxy oculta operações WS definidas pelo wsdl. Então, ao mover tudo para o SoapClient, as operações wsdl não são mais ocultadas sem ter que usar nomes hoky para atributos e métodos no proxy de serviço. Em vez disso, o proxy de serviço possui atributos client e factory (que realmente devem ter baixo risco de colisão de nomes). Por enquanto, os métodos get_instance() e get_enum() não foram movidos para preservar a compatibilidade reversa. Embora, a mudança de API preferida seria substituir:
service = ServiceProxy('myurl') person = service.get_instance('person')
... por algo como ...
service = ServiceProxy('myurl') person = service.factory.get_instance('person')
Após algumas versões dando tempo para os usuários mudarem para a nova API, os métodos get_instance() e get_enum() podem ser removidos com um aviso em letras grandes.
Corrigido problema onde um wsdl não define uma seção e o Suds não consegue resolver os prefixos para o namespace http://www.w3.org/2001/XMLSchema para detectar tipos internos como (xs:string).
versão-0.1.7 (04-08-08):
Adicionado Binding.nil_supported para controlar como valores de propriedade (out) = None e tags vazias (in) são processados.
Manipulador Sax atualizado para lidar com múltiplos callbacks character() quando o parser sax "fragmenta" o texto. Quando node.text é None, node.text é definido como os caracteres. Caso contrário, os caracteres são anexados. Agradecimentos - [email protected]
Substituído atributo especial (text) por text para permitir elementos naturais nomeados "text"
Adicionado suporte a unicode:
Saída XML codificada como UTF-8 que corresponde ao cabeçalho HTTP e suporta unicode.
SchemaCollection alterado para fornecer os métodos builtin() e custom(). Para suportar isso, findPrefixes() foi adicionado ao Element em sax.py. Esta é uma abordagem melhor de qualquer forma, já que o wsdl e os esquemas podem ter muitos prefixos para http://www.w3.org/2001/XMLSchema. Testado com bindings doc/lit e rpc/lit
Pacotes de bindings refatorados de document & rpc para literal & encoded
Contém a conclusão do suporte completo a namespaces da seguinte forma:
Property mantém nomes de atributos (chaves) na ordem adicionada. Isso também significa que get_item() e get_names() retornam valores ordenados. ( Embora, eu suspeite que a ordenação realmente precisa ser feita no marshaller usando a ordem especificada no wsdl/schema )
Grande refatoração do schema.py. O principal objetivo é a preparação para buscas de tipo que são totalmente qualificadas por namespace. Uma vez concluído, os prefixos nos valores de atributo não serão mais removidos (eliminados). Resumo das mudanças: 1) Classes de sobreposição SchemaProperty criadas em init em vez de sob demanda. 2) importações de schema realizadas pela nova classe Import em vez de por Schema. 3) Schema carrega propriedades de nível superior usando uma fábrica. 4) Todas as listas /children/ de SchemaProperty são ordenadas por cmp nas classes derivadas de SchemaProperty. Isso garante que tipos com o mesmo nome sejam resolvidos na seguinte ordem (Import, Complex, Simple, Element). 5) Todas as listas /children/ de SchemaProperty são construídas em init em vez de sob demanda. 6) O SchemaGroup criado e a classe WSDL atualizada. Isso funciona melhor do que ter o wsdl agregando os nós que corta a ligação com o elemento pai do wsdl que possui mapeamento de prefixo de namespace. 7) O elemento é tratado adequadamente, tanto o remapeamento de namespace quanto o re-mapeamento de prefixo do targetNamespace do schema importado e o mapeamento de prefixo associado - são realizados. Ex: SCHEMA-A tem prefixo (tns) mapeado como xmlns:tns=http://nsA e tem targetNamespace=http://nsA. SCHEMA-B está importando schema A e tem prefixo (abc) mapeado como xmlns:abc=http://nsABC. SCHEMA-B importa A como <import namespace=http://nsB xxx schemaLocation=http://nsA/schema-a.xsd>. Então, como SCHEMA-B fará referência a elementos de SCHEMA-A com prefixo (abc) como abc:something, o targetNamespace de SCHEMA-A deve ser atualizado para http://nsABC e todos os elementos com type=tns:something devem ser atualizados para type=abc:something para que possam ser resolvidos.
Corrige problema de desserialização onde nós são adicionados à propriedade como (text, value). Isso foi introduzido quando os bindings foram refatorados.
Corrigidos vários problemas de impressão de Property.
Notas:
Agradecimentos a Jesper Noehr da Coniuro pela maior parte do binding rpc/literal e
por muita colaboração no #suds.
versão-0.1.6 (03-06-08):
versão-0.1.5 (21-02-08):
versão-0.1.4 (21-12-07):
versão-0.1.3 (19-12-07):
versão-0.1.2 (18-12-07):
Esta versão contém uma atualização para property adiciona: * suporte a metadata * sobrescritas: getitem, setitem, contans * altera property(reader|writer) para usar property.metadata para lidar com namespaces para documentos XML. * corrige requires no setup.py.
versão-0.1.1 (17-12-07):
Esta versão marca o primeiro lançamento no fedora hosted.
Atualizado carregamento de esquema e propriedade de esquema (recursão profunda interrompida); Alterado esquemas importados para que não copiem mais esquemas importados, em vez disso, o proxy de importação encontra solicitações; Adicionado classe ServiceDefinition que fornece melhor inspeção de serviço; também fornece mapeamento de namespace e mostra tipos; api de propriedade de esquema simplificada; suporte para xs:any e xs:anyType adicionado; Alguns problemas de busca de esquema corrigidos; Classes Binding refatoradas ligeiramente; Muito logging de depuração adicionado (talvez seja necessário comentar alguns para desempenho - alguns dos args são caros).
Adicionar sudsobject.Property; uma property é um Object especial que contém um atributo (value) e é retornado pelo Builder (factory) para tipos de esquema sem filhos, como: e ; Builder, Marshallers e Resolvers atualizados para lidar com Properties; Resolver, Schema também atualizados para lidar com buscas de atributos (isso estava faltando)
Adicionar bases para cabeçalhos soap definidos pelo usuário.
Corrigir elementFormDefault conforme ticket #7
Remover kwargs não utilizados de bindings; cache bindings no wsdl; retrofitado ServiceProxy legado para delegar para {nova} API Client; remover palavra-chave nil_supported em favor do tratamento natural pelo atributo 'nillable' em dentro de esquemas
Adicionar suporte para flags de atributo (nillable e form)
Adicionar a classe Proxy (API de segunda geração)
Adicionar funções de acesso/conversão para que o usuário não precise acessar atributos x. Além disso, adicionar todict() e get_items() para conversão fácil para dicionário e iteração
Pesquisar elementos de nível superior por @ref antes de procurar mais profundamente
Adicionar derived() a SchemaObject. Isto é necessário para garantir que todos os tipos derivados (classes wsdl) sejam qualificados por xsi:type sem especificar xsi:type para todos os tipos personalizados como feito em versões anteriores do suds. Atualizar o marshaller literal para adicionar xsi:type apenas quando o tipo precisar ser especificado.
Alterar promoção ns no sax para evitar que ns seja promovido ao pai quando o pai tem o prefixo.
Alterar returned_type() da binding para retornar o Element (não resolvido)
Para suportar os novos recursos e corrigir bugs relatados, estou no processo de refatorar e, espero, evoluir os componentes no Suds que fornecem as traduções de entrada/saída:
Esta evolução fornecerá melhor simetria entre esses componentes da seguinte forma:
O Builder e o Unmarshaller produzirão python (subclasse de sudsobject.Object) objetos com:
e
O(s) Marshaller(s), ao consumir objetos python produzidos pelo Builder ou Unmarshaller, aproveitarão essas informações padrão para produzir a saída apropriada ( XML/SOAP ).
O código 0.2.1 se comporta na maior parte assim, mas ... não exatamente. Além disso, as implementações têm alguma redundância.
Ao fazer isso, fez sentido fatorar a funcionalidade comum de "busca" de tipo de esquema usada pelas classes Builder, Marshallers e Unmarshaller em uma hierarquia de classes "Resolver". Isso reduz a complexidade e a redundância das classes Builder, Marshallers e Unmarshaller e permite melhor modularidade. Uma vez que essa refatoração foi concluída, a diferença entre os Marshallers literal/encoded tornou-se muito pequena. Dado que a quantidade de código nos pacotes bindings.literal e bindings.encoded era pequena (e ficando menor) e no interesse de manter a base de código do Suds compacta, movi todas as classes de marshalling para o módulo bindings.marshaller. Todos os sub-pacotes bindings.XX serão removidos.
O efeito líquido:
Todos os principais componentes do Suds:
Agora têm melhor:
... e fornecem melhor para os seguintes recursos/correções de bugs:
O builder e o unmarshaller usavam schema.Schema.find() para resolver tipos de esquema. Eles construíam um caminho como "person.name.first" para resolver tipos no contexto adequado. Como Schema.find() não tinha estado, ele resolvia os elementos de caminho intermediários em cada chamada. As novas classes resolver têm estado e resolvem tipos filhos de forma muito mais eficiente.
Prevenir colisões de nomes em sudsobject.Object como o método items(). Mudei todos os métodos (incluindo métodos de classe) para uma classe Factory que está incluída na classe Object como um atributo de classe ( factory ). Agora que todos os atributos têm nomenclatura built-in do python, não devemos ter mais colisões de nomes. Isso, claro, pressupõe que nenhum nome de entidade wsdl/schema terá um nome com a convenção de nomenclatura built-in do python, mas tenho que traçar um limite em algum lugar :-)