概述
"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 中的弃用警告。
* 为 <element/> 上定义的 @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 根 <definitions/> 的支持。
* 修复 (&) 的双重编码。
* 添加 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 绑定,始终发送由 <part/> 引用的文档根元素。
在又一次仔细审查空间和用户输入后,似乎被引用的元素始终是文档根元素。
* 添加对 '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 {包裹},将文档根元素(位于 <body/> 下)设置为包裹元素(带有适当命名空间)。
* 添加对具有 maxOccurs 的 <sequence/>、<all/> 和 <choice/> 的支持,使解编组器将包含在无界集合中的元素的值设置为列表。
* 更新 client.factory(构造器)以省略 <choice/> 的子元素,因为用户真正需要决定包含哪些子元素。
* 更新展平算法,防止重新展平来自导入 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 <import/>
* 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 类型,
如 <element/> 和 <simpleType/>;更新构建器、编组器和解析器以处理属性;同时更新解析器和 schema 以处理属性查找(之前缺失)。
* 为用户定义的 SOAP 头部打下基础。
* 根据 ticket #7 修复 elementFormDefault。
* 从绑定中移除未使用的 kwargs;在 wsdl 中缓存绑定;改进旧的 ServiceProxy 以委托给新的 Client API;
移除 nil_supported 关键字,改为通过 schema 中 <element/> 的 'nillable' 属性自然处理。
* 添加对 <element/> 属性标志(nillable 和 form)的支持。
* 添加 Proxy(第二代 API)类。
* 添加访问器/转换函数,使用户无需访问 __x__ 属性。
同时添加 todict() 和 get_items() 以便于转换为字典和迭代。
* 在搜索引用时,先查找顶级元素的 @ref,然后再深入搜索。
* 向 SchemaObject 添加 derived()。这是为了确保所有派生类型(wsdl 类)都通过 xsi:type 限定,
而不必像 suds 早期版本那样为所有自定义类型手动指定 xsi:type。更新 literal 编组器,仅当需要指定类型时才添加 xsi:type。
* 更改 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%)
* 更松散的耦合
……并更好地支持以下功能/错误修复:
*(修复)基于 <schema elementFormDefault=""/> 属性的正确元素限定级别。这将确保当 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 内置命名约定冲突,但我必须在某个地方划清界限 :-)
版本 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。
这确保了当本地 <import/> 的 schema 被乱序引用时,可以找到它们。
sax.py 的 Element 接口已更改:attribute() 被 get() 和 set() 取代。
此外,可以使用 __getitem__ 和 __setitem__ 访问属性值。
sax.py 的 Epydocs 已更新。并且……最后 <element ref=/> 现在被正确支持。
* 修复日志记录:不要在 suds.__init__.logger() 中设置为 INFO;仅在根记录器上设置处理程序;
将记录器 (log) 从类移至模块,并使用 __name__ 作为记录器名称。
注意:这意味着要启用 SOAP 消息日志记录,需执行:
>
> logging.getLogger('suds.serviceproxy').setLevel(logging.DEBUG)
>
-- 而不是 --
>
> logging.getLogger('serviceproxy').setLevel(logging.DEBUG)
>
* 添加对 (xsd) schema <attribute/> 节点的支持,这主要影响 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 变更应该是将:
> 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)的问题。
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 编码结果。
* 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 中指定的顺序进行)
对 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 托管下的第一个版本。