Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
suds — Clone of suds 0.4 + suds-0.4-CVE-2013-2217.patch | Kitploit
工具/GitHubGitHub/osirium/suds
Vulnerability AnalysisScripting & AutomationAPI Security TestingWeb SecurityUtilities & FrameworksAPI Security
GitHubosirium/suds

suds

Clone of suds 0.4 + suds-0.4-CVE-2013-2217.patch

查看仓库
8年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

概述

"Suds" 网络服务客户端是一个基于SOAP的轻量级Python客户端,采用LGPL许可证发布。

详细信息请访问:

  • 项目站点:https://fedorahosted.org/suds/
  • 文档:https://fedorahosted.org/suds/wiki/Documentation
  • Epydocs:http://jortel.fedorapeople.org/suds/doc/

版本发布说明:

版本 0.3.6 (04-31-09):

  • 将硬编码的 /tmp/suds 改为 tempfile.gettempdir() 并按需创建 suds/ 目录。
  • 修复 Any.get_attribute() 的返回类型。
  • 更新 HTTP 缓存以忽略 file:// 网址。
  • 当仅注入回复时,更好地记录消息。
  • 修复 XInteger 和 XFloat 类型以正确转换返回的数组。
  • 修复同命名空间的 xs:import schema。
  • 更新解析器以不加载外部引用,并为 XMLSchema.xsd 位置添加 Import.bind()。
  • 添加 schema doctor - 用于在运行时修补 XSD。(参见 Option.doctor)
  • 修复 Python 2.6 中的弃用警告。
  • 为 上定义的 @default 添加行为。
  • 更改 @xsi:type 的值,使其始终限定于 doc/literal。(还原 0.3.5 的更改)。
  • 添加 Option.xstq 选项以控制 @xsi:type 何时被限定。
  • 已修复的问题: #64, #129, #205, #206, #217, #221, #222, #224, #225, #228, #229, #230

版本 0.3.5 (04-16-09):

  • 添加 HTTP 缓存。默认缓存期为 1 天。不适用于方法调用。详见文档。
  • 移除了 spec 中对 fedora 版本的检查,因为不再构建低于 fc9 的版本。
  • 更新 Makefile,使用 tar.sh 打包。
  • 将 bare/wrapped 的判断移至 wsdl 中以处理 document/literal。
  • 将 Transport 重构为一个包(提供更好的 HTTP 头部日志)。
  • 已修复的问题: #207, #209, #210, #212, #214, #215

版本 0.3.4 (02-24-09):

  • 静态(自动)Import.bind('http://schemas.xmlsoap.org/soap/encoding/'),用户不再需要手动执行。
  • 基本的 ws-security,支持 {{{UsernameToken}}} 和明文密码。
  • 通过传递字典支持“稀疏”的 SOAP 头部。
  • 支持任意用户自定义的 SOAP 头部。
  • 修复包含多个 SOAP 头部条目的服务操作。
  • Schema 加载和去引用算法增强。
  • 修复嵌套的 SOAP multiref。
  • 更好地(真正地)支持 elementFormDefault="unqualified",提供更精确的命名空间处理。
  • WSDL part 类型不再默认为 WSDL 的目标命名空间。
  • 已修复的问题: #4, #6, #21, #32, #62, #66, #71, #72, #114, #155, #201。

版本 0.3.3 (11-31-08):

  • 不再安装 (tests) 包。
  • 实现 API-3 提案 ( https://fedorahosted.org/suds/wiki/Api3Proposal )
    • 可插拔的传输
    • 关键字方法参数
    • 默认传输中的基本 HTTP 认证
  • 在 SOAP 消息中添加命名空间前缀规范化。
  • 更好地修剪 SOAP 消息中的空节点。
  • 已修复的问题: #51 - #60

版本 0.3.2 (11-7-08):

  • SOAP {{{MultiRef}}} 支持 ''(首次实现于 r300)''
  • 添加对新 schema 标签的支持:
    • xs:include/
    • xs:simpleContent/
    • xs:group/
    • xs:attributeGroup/
  • 添加新的 xs <--> python 类型转换支持:
    • xs:int
    • xs:long
    • xs:float
    • xs:double
  • 修订编组器和绑定,进一步优化生成的节点的命名空间。
  • 修复了 ''xsd'' 包中 dereference() 在 schema 加载时的无限递归。
  • 添加对 wsdl:import/ 将 schema 文件导入到 wsdl 根 的支持。
  • 修复 (&) 的双重编码。
  • 添加 Client API:
    • setheaders() - 与关键字相同,但适用于所有调用。
    • addprefix() - 命名空间前缀的映射。
    • setlocation() - 覆盖 wsdl 中的位置;与关键字相同,但适用于所有调用。
    • setproxy() - 与 proxy 关键字相同,但适用于所有调用。
  • 为 SOAP 头部添加正确的命名空间前缀。
  • 已修复的问题: #5, #12, #34, #37, #40, #44, #45, #46, #48, #49, #50, #51

版本 0.3.1 (10-1-08):

  • 快速跟进 0.3 版本,该版本使得处理多端口服务定义变得比必要更困难。经过考虑(以及一夜好眠), 显然一些更改会使这变得更容易:1)过滤掉非 SOAP 绑定——它们才是真正的问题所在;2)由于大多数服务器 对任何 SOAP 绑定(soap 1.1 和 1.2)都能正常工作,因此在不指定端口的情况下调用方法时,含糊的方法引用 在几乎所有情况下都能正常工作。那么,为什么不让 suds 自行选择端口呢?在非必要的情况下,不要让用户去指定。 大多数情况下,使用 0.2.9 及更早版本的用户在迁移到 0.3.1 时不必像在 0.3 中那样更新代码。

版本 0.3 (9-30-08):

  • 扩展了 0.2.9 中引入的多端口服务支持。此次新增功能支持多个服务定义 相同 的方法,suds 将正确处理。 请参见 '多端口服务' 一节。

  • 添加对多文档 document/literal soap 绑定样式的支持。 请参见 '多文档 Document/Literal' 一节。

  • 添加对 (xs:group, xs:attributeGroup) 标签的支持。

  • 添加 Client.last_sent() 和 Client.last_received()。

版本 0.2.9 (9-09-08):

  • 支持服务中的多个端口。
  • 属性引用 <xs:attribute ref=""/>
  • 使 sax 包中的 XML 特殊字符编码器可插拔。

版本 0.2.8 (8-28-08):

  • 更新 document/literal 绑定,始终发送由 引用的文档根元素。 在又一次仔细审查空间和用户输入后,似乎被引用的元素始终是文档根元素。

  • 添加对 'binding' schemaLocation 到 namespace-uri 的支持。 这是针对那些没有指定 schemaLocation 但仍期望下载 schema 的导入。例如:Axis 引用了 'http://schemas.xmlsoap.org/soap/encoding/' 但没有提供 schemaLocation。因此,通过执行:

    from suds.xsd.sxbasic import Import. Import.bind('http://schemas.xmlsoap.org/soap/encoding/')

    该 schema 被绑定到一个 schemaLocation 并被下载。

  • 基本解编组器不再需要 /schema/。 在重构期间本应移除但遗漏了。

  • 更新客户端,将 kwargs 传递给 send(),并添加 /location/ kwarg 用于覆盖 wsdl 中的服务位置。

  • 更新编组器,不为表示 同时 为可选且值为 None 的元素和/或属性的对象属性生成 XML。 * 更新工厂(构造器)以包含所有属性。 * 向 SchemaObject 添加 optional() 方法。

  • 更新 wsdl,在指定了命名空间时覆盖操作中的命名空间。

  • 修复 schema 加载问题——在处理导入前构建所有 schema。

  • 更新打包,为提交到 fedora 做准备。

版本 0.2.7 (8-11-08):

  • 添加对 document/literal(包裹和未包裹)的检测/支持。
  • 更新 document/literal {包裹},将文档根元素(位于 下)设置为包裹元素(带有适当命名空间)。
  • 添加对具有 maxOccurs 的 、 和 的支持,使解编组器将包含在无界集合中的元素的值设置为列表。
  • 更新 client.factory(构造器)以省略 的子元素,因为用户真正需要决定包含哪些子元素。
  • 更新展平算法,防止重新展平来自导入 schema 的类型。
  • 对展平/合并算法的调整。

版本 0.2.6 (8-5-08):

  • 修复在 xsd 包大修期间损坏的 ENUM。
  • 根据 ticket #24 修复类型。
  • 根据 ticket #30 报告,修复方法签名中的重复参数名。
  • Suds 以 LGPL 许可发布。
  • 根据 ticket #31 的补丁建议,移除 suds.init() 中的日志配置。用户现在需要自行配置日志记录器。
  • 添加对 Client.Factory.create() 替代语法的支持:使用 {namespace}name 格式完全限定要构建的类型。 例如:client.factory.create('{http://blabla.com/ns}Person')

版本 0.2.5 (8-01-08):

  • 对 (XSD) 包进行了大修。这种新的(合并)方法更简单,应该更可靠且更易维护。同时,由于合并后的 schema 通过字典查找进行查找,性能应会更好。

    此次大修应能修复当前的 TypeNotFound 和 xs:extension/ 问题,希望如此 :-)。

  • 修复 dateTime 打印错误。

  • 为 builder.Builder 添加了针对自包含 xs 类型的无限递归预防。

版本 0.2.4 (7-28-08):

  • 添加对 WSDL 导入的支持:wsdl:import/
  • 添加 xs 到 python 类型转换的支持(感谢:Nathan Van Gheem):
    • xs:date
    • xs:time
    • xs:dateTime
  • 修复的问题:
    • Bug:带有 schemaLocation 的 Schema
    • Bug:服务描述中指定的命名空间在打印 client/proxy 之前无效。

版本 0.2.3 (7-23-08):

  • 优化。

版本 0.2.2 (7-8-08):

  • 更新异常,通过使用 Exception.init() 设置 Exception.message 使其更符合标准的 Python 风格,如 ticket #14 所建议;更新绑定以引发 WebFault 并传递 (p)

  • 在绑定中添加处理返回值中多个根节点的能力;以复合对象形式返回,与返回列表时不同。

  • 修复 soapAction 未被引号括起的问题。

  • 添加对 xs:all/ 的支持。

  • 修复 SchemaObject 中的 unbounded() 方法。

  • 将 schema 重构为新的 (xsd) 包。文件变得太大。向 Query 添加 execute() 方法,并改进 suds 使用 execute() 查询而不是直接使用 Schema.find()。 同时,将 schema 中简陋的 start() 方法以及查询递增逻辑移出。

  • 添加 inject 关键字,用于注入传出的 SOAP 消息和/或传入的回复消息。 重构 SoapClient 并:

    1. 将 send() 重命名为 invoke()
    2. 将消息发送从 invoke() 中分离,放入 send(); 添加 TestClient,允许在调用 kwargs 中使用 inject={'msg=, reply='} 进行消息和回复注入。
  • 在 sax 中添加 Namespace 类,以更好地管理命名空间行为; 改进 suds 以导入并使用 Namespace。

  • 更改用于解析引用类型(具有 @base="",@type="" 属性)的默认命名空间,以便在未指定前缀时使用 XML(节点)命名空间而非 targetNamespace。

  • 按照 [email protected] 在 ticket #13 中的定义应用修复。

  • 更新服务定义,以 " my_method(xs:int arg0, Person arg1) " 的形式显示服务方法,而不是 " my_method(arg0{xs:int}, arg1{Person}) ",这更接近传统的方法签名。

  • 向解编组器添加 xsd/python 类型转换(仅 XBoolean);重构解编组器以使用 Content 类,这使 API 更简洁, 增加了编组器与解编组器之间的对称性,并为基于 schema 属性的类型转换提供了良好的机制。

  • 使用 Appenders 重构编组器;向 resolve() 添加 nobuiltin 标志,以支持绑定中 returned_type() 和 returned_collection() 的修复。

  • 添加对 (202,204) HTTP 状态码的支持。

  • 添加 XBoolean 和映射;向 TreeResolver 添加 findattr() 以为类型转换做准备。

  • 更新 schema 和 schema 属性加载(停止深度递归);更改导入的 schema,使其不再复制导入的 schema, 而是由导入代理将查找请求代理出去;添加 ServiceDefinition 类,提供更好的服务检查;同时提供命名空间映射并显示类型; schema 属性 API 简化;添加对 xs:any 和 xs:anyType 的支持;修复一些 schema 查找问题;对绑定类进行轻微重构; 添加大量调试日志(可能需要注释掉部分以提升性能,某些参数非常昂贵)。

  • 添加 sudsobject.Property;属性是一个特殊的 Object,包含一个 (value) 属性,由构建器(工厂)返回给没有子元素的 schema 类型, 如 和 ;更新构建器、编组器和解析器以处理属性;同时更新解析器和 schema 以处理属性查找(之前缺失)。

  • 为用户定义的 SOAP 头部打下基础。

  • 根据 ticket #7 修复 elementFormDefault。

  • 从绑定中移除未使用的 kwargs;在 wsdl 中缓存绑定;改进旧的 ServiceProxy 以委托给新的 Client API; 移除 nil_supported 关键字,改为通过 schema 中 的 'nillable' 属性自然处理。

  • 添加对 属性标志(nillable 和 form)的支持。

  • 添加 Proxy(第二代 API)类。

  • 添加访问器/转换函数,使用户无需访问 x 属性。 同时添加 todict() 和 get_items() 以便于转换为字典和迭代。

  • 在搜索引用时,先查找顶级元素的 @ref,然后再深入搜索。

  • 向 SchemaObject 添加 derived()。这是为了确保所有派生类型(wsdl 类)都通过 xsi:type 限定, 而不必像 suds 早期版本那样为所有自定义类型手动指定 xsi:type。更新 literal 编组器,仅当需要指定类型时才添加 xsi:type。

版本 0.2.1 (5-8-08):

  • 更新 schema.py 的 SchemaProperty 加载顺序,使 schema 分 3 步加载: 1) 构建原始树。 2) 解析诸如 @ref 和 @base 的依赖。 3) 根据需要提升孙节点以展平(反规范化)树。

    wsdl 也被修改为仅加载 schema 一次并存储它。schema 集合被修改为分 2 步加载 schema: 1) 创建所有原始 schema 对象。 2) 加载 schema。

    这确保了当本地 的 schema 被乱序引用时,可以找到它们。 sax.py 的 Element 接口已更改:attribute() 被 get() 和 set() 取代。 此外,可以使用 getitem 和 setitem 访问属性值。 sax.py 的 Epydocs 已更新。并且……最后 现在被正确支持。

  • 修复日志记录:不要在 suds.init.logger() 中设置为 INFO;仅在根记录器上设置处理程序; 将记录器 (log) 从类移至模块,并使用 name 作为记录器名称。 注意:这意味着要启用 SOAP 消息日志记录,需执行: > > logging.getLogger('suds.serviceproxy').setLevel(logging.DEBUG) > -- 而不是 -- > > logging.getLogger('serviceproxy').setLevel(logging.DEBUG) >

  • 添加对 (xsd) schema 节点的支持,这主要影响 Builder 返回的对象。

  • 更新 serviceproxy.py:set_proxies() 以记录 DEBUG 而不是 INFO。

  • 增强 schema str 以同时显示原始 XML 和模型(主要用于调试)。

版本 0.2 (04-28-08):

  • 包含 rpc/encoded SOAP 样式的首次实现。

  • 用 suds.sudsobject.Object 替换 Property 类。Property 类是很久以前开发的,目的略有不同。 suds 的 Object 是一种更简单(更直接)的方法,需要更少的代码,并且在调试器中工作得更好。

  • 绑定(和编码)是按方法选择的,这与 wsdl 更一致。在 <= 0.1.7 中,绑定是在构造 ServiceProxy 时选择的,并用于所有服务方法。 绑定被存储为 self.binding。由于 WSDL 允许每个操作有不同的绑定样式和编码,Suds 需要以相同的方式工作。* (nil_supported) 和 (faults) 标志通过 **kwargs 传递给服务代理。除了这些标志外,还添加了 (http_proxy) 标志,并传递给 urllib2.Request 对象。支持以下参数:

  • faults = 引发服务器引发的故障(默认:True),否则从服务方法调用返回元组 (http code, object)。

  • nil_supported = 绑定将在值为 None 的节点上设置 xsi:nil="true",当此标志为 True 时(默认:True)。否则,发送空节点 <x/>。

  • proxy = 请求中指定的 http 代理(默认:{})。代理定义为 {protocol:proxy,}

  • 支持 Http 代理(见上文)。

  • ServiceProxy 重构为委托给 SoapClient。由于服务代理通过 getattr() 公开 Web 服务,因此 ServiceProxy 类提供的任何属性(包括方法)都会隐藏 wsdl 定义的操作。因此,通过将所有内容移动到 SoapClient,wsdl 操作不再被隐藏,而无需在服务代理中使用 hoky 名称。相反,服务代理具有 __client__ 和 __factory__ 属性(实际上这些属性名称冲突风险很低)。目前,get_instance() 和 get_enum() 方法尚未移动以保持向后兼容性。不过,推荐的 API 变更应该是将:

version-0.1.7 (04-08-08):

  • 添加了 Binding.nil_supported 来控制属性值(输出)为 None 和空标签(输入)的处理方式。

    • service.binding.nil_supported = True —— 表示属性值 = None 在输出时会被编组为 <x xsi:nil=true/>,而 <x/> 会被解组为 '',<x xsi:nil/> 会被解组为 None。
    • service.binding.nil_supported = False —— 表示属性值 = None 在输出时会被编组为 <x/>,并且 <x/> 和 <x xsi:nil=true/> 都会被解组为 None。xsi:nil 实际上被忽略。
    • 默认值为(True)
  • Sax 处理器更新为处理 sax 解析器“分块”文本时的多个 character() 回调。当 node.text 为 None 时,将 node.text 设置为字符。否则,将字符追加。感谢 - [email protected]

  • 将特殊的 (text) 属性替换为 __text__,以允许名为 "text" 的自然元素。

  • 通过以下方式添加 unicode 支持:

    • 为所有具有 __str__ 的类添加 __unicode__。
    • 将所有 str() 调用替换为 unicode()。
    • __str__() 返回 __unicode__ 的 UTF-8 编码结果。

对 schema.py 进行了重大重构。主要目标是为通过命名空间完全限定的类型查找做准备。完成后,属性值上的前缀将不再被剥离(清除)。 变更摘要:

  1. SchemaProperty 覆盖类在 __init__ 时创建,而不是按需创建。
  2. schema 导入由新的 Import 类执行,而不是由 Schema 执行。
  3. Schema 使用工厂加载顶级属性。
  4. 所有 SchemaProperty /children/ 列表在 SchemaProperty 派生类中按 __cmp__ 排序。这确保具有相同名称的类型按以下顺序解析(Import, Complex, Simple, Element)。
  5. 所有 /children/ SchemaProperty 列表在 __init__ 时构建,而不是按需构建。
  6. 创建了 SchemaGroup 并更新了 WSDL 类。这比让 wsdl 聚合 <schema/> 节点效果更好,因为后者会切断与具有命名空间前缀映射的 wsdl 父元素的链接。
  7. <import/> 元素被正确处理,执行了对导入 schema 的 targetNamespace 和关联前缀映射的命名空间重新映射和前缀重新映射。 例如:SCHEMA-A 有前缀 (tns) 映射为 xmlns:tns=http://nsA,并且 targetNamespace=http://nsA。 SCHEMA-B 正在导入 schema A,并且有前缀 (abc) 映射为 xmlns:abc=http://nsABC。 SCHEMA-B 导入 A 为 <import namespace=http://nsB xxx schemaLocation=http://nsA/schema-a.xsd>。 因此,由于 SCHEMA-B 将使用前缀 (abc) 引用 SCHEMA-A 的元素,例如 abc:something,所以 SCHEMA-A 的 targetNamespace 必须更新为 http://nsABC,并且所有 type=tns:something 的元素必须更新为 type=abc:something,以便能够解析。
  • 修复了属性中节点以 (text, value) 形式添加时导致的解组问题。该问题是在重构绑定引入的。

  • 修复了各种 Property 打印问题。

注意:

感谢 Coniuro 的 Jesper Noehr 提供了大部分 rpc/literal 绑定,并在 #suds 讨论中进行了大量合作。

version-0.1.6 (03-06-08):

  • 正确处理包含 xsd schema 导入的 wsdl:<import namespace="" schemaLocation=""?>。当指定了 schemaLocation 时,会导入引用的 schema。
  • 对尚未处理的 http 状态码引发异常。

version-0.1.5 (02-21-08):

  • 在模块中提供更好的日志记录,通过分层名称获取记录器。
  • 根据需要进行重构,以真正支持其他绑定。
  • 添加 sax 模块,替代 ElementTree。这更快、更简单,并且正确处理命名空间(前缀)。

version-0.1.4 (12-21-07):

  • 支持服务方法参数为 None。
  • 添加对作为属性对象列表的方法参数的正确处理。

version-0.1.3 (12-19-07):

  • 修复了标记为集合(maxOccurs > 1)的节点在 DocumentReader 映射输入值时(如果值少于 2 个)无法创建值为 [] 的属性对象的问题。这是由于缺少 bindings.Document.ReplyHint.stripns()(使用 DocumentReader.stripns())到 DocumentReader.stripn() 的转换所致,后者自 0.1.2 版本起返回元组 (ns,tag)。

version-0.1.2 (12-18-07):

此版本包含对 property 的更新,新增了:

  • 元数据支持
  • 覆盖:__getitem__, __setitem__, __contans__
  • 更改 property(reader|writer) 使用 property.metadata 处理 XML 文档的命名空间。
  • 修复 setup.py 的 requires。

version-0.1.1 (12-17-07):

此版本标志着在 fedora 托管下的第一个版本。

下载工具
  • 更改 sax 中的 ns 提升,防止在父节点已有该前缀时将其提升到父节点。

  • 将绑定中的 returned_type() 更改为返回(未解析的)Element。

  • 为了支持新功能并修复报告的错误,我正在进行 Suds 中提供输入/输出翻译的组件的重构和进化:

    • Builder(翻译:XSD 对象 => python 对象)
    • Marshaller(翻译:python 对象 => XML/SOAP)
    • Unmarshaller(翻译:soap/xml => python 对象)

    这次进化将在这些组件之间提供更好的对称性,如下所示:

    Builder 和 Unmarshaller 将生成 python 对象(sudsobject.Object 的子类),这些对象具有:

    • metadata.type = XSD 类型 (SchemaObject)
    • 子类名称 ( class.name ) = schema 类型名称。

    并且

    Marshaller(s) 在消费 Builder 或 Unmarshaller 生成的 python 对象时,将利用这些标准信息来生成适当的输出(XML/SOAP)。

    0.2.1 的代码 大致 如此,但……并非完全如此。此外,实现中存在一些冗余。

    在此过程中,将 Builder、Marshaller 和 Unmarshaller 类中常用的 schema 类型“查找”功能提取到一组“Resolver”类中是有意义的。这降低了 Builder、Marshaller 和 Unmarshaller 类的复杂性和冗余,并允许更好的模块化。一旦重构完成,literal/encoded Marshaller 之间的差异变得非常小。鉴于 bindings.literal 和 bindings.encoded 包中的代码量已经很小(并且还在变小),并且为了保持 Suds 代码库紧凑,我将所有编组类移到了 bindings.marshaller 模块。bindings.XX 子包将被移除。

    最终效果:

    Suds 的所有主要组件:

    • client(旧的服务代理)
    • wsdl
      • schema(xsd 包)
      • resolvers
    • output(编组)
    • builder
    • input(解编组)

    现在具有更好的:

    • 模块性
    • 关于 Object 元数据的对称性
    • 代码复用(希望代码重复率低于 1%)
    • 更松散的耦合

    ……并更好地支持以下功能/错误修复:

    *(修复)基于 属性的正确元素限定级别。这将确保当 elementFormDefault="qualified" 时,Suds 会为 literal 和 encoded 绑定在根元素上包含正确的命名空间。为了使这一点正常工作,literal 编组器(就像 encoded 编组器一样)需要感知 schema 类型。如果我没有采用上述重构而是向 literal 编组器添加与 encoded 编组器相同的 schema 类型查找,那么这两个类几乎会完全重复 :-(

  • Builder 和 Unmarshaller 使用 schema.Schema.find() 来解析 schema 类型。它们构建一个类似 "person.name.first" 的路径来在适当的上下文中解析类型。由于 Schema.find() 是无状态的,它在每次调用时都会解析中间的路径元素。新的 resolver 类是有状态的,并且以 更高 的效率解析子类型。

  • 防止 sudsobject.Object 中的名称冲突,例如 items() 方法。我将所有方法(包括类方法)移到了一个 Factory 类中,该类作为类属性 ( factory ) 包含在 Object 类中。现在 所有 属性都遵循 Python 内置命名约定,我们不应该再有名称冲突。当然,这假设没有 wsdl/schema 实体名称会与 Python 内置命名约定冲突,但我必须在某个地方划清界限 :-)

  • service = ServiceProxy('myurl') person = service.get_instance('person')

    ... 替换为类似 ...

    service = ServiceProxy('myurl') person = service.factory.get_instance('person')

    经过几个版本,给用户时间切换到新 API 后,get_instance() 和 get_enum() 方法可能会被移除,届时会以大字通知。

  • 修复了 wsdl 未定义 <schema/> 部分时,Suds 无法解析 http://www.w3.org/2001/XMLSchema 命名空间的前缀以检测内置类型(如 xs:string)的问题。

  • XML 输出编码为 UTF-8,与 HTTP 头部匹配并支持 unicode。

  • SchemaCollection 更改为提供 builtin() 和 custom() 方法。为了支持这一点,在 sax.py 的 Element 中添加了 findPrefixes() 方法。无论如何,这是一种更好的方法,因为 wsdl 和 schema 可能有许多指向 http://www.w3.org/2001/XMLSchema 的前缀。已在 doc/lit 和 rpc/lit 绑定上进行了测试。

  • 重构了绑定包,从 document & rpc 改为 literal & encoded。

  • 包含 完整 命名空间支持的完成,具体如下:

    • 不再从引用 wsdl 中定义类型的属性值中剥离命名空间前缀。
    • 使用 <import/> 导入的 Schema 应正确处理命名空间和前缀的映射以及根据需要重新映射。
    • 所有类型都使用完全限定(带命名空间)的查找来解析。
    • Schema.get_type() 支持带和不带 ns 前缀的路径。当未指定前缀时,使用 schema 的目标命名空间匹配类型。
  • Property 按添加顺序维护属性名称(键)。这也意味着 get_item() 和 get_names() 返回有序的值。 (不过,我怀疑排序实际上应该在编组器中根据 wsdl/schema 中指定的顺序进行)