轻量级soap客户端

suds-py3k的Python项目详细描述


概述

"suds"web服务客户端是针对python的基于soap的轻量级客户端
根据lgpl获得许可。

有关详细信息,请访问:

*项目站点:https://fedorahosted.org/suds/
*文档:https://fedorahosted.org/suds/wiki/documentation
*epydocs:http://jotel.fedoradorapeople.org/suds/doc/




>发布说明:
==================================================



*更新http缓存以忽略file://url。
*仅注入应答时更好地记录消息。
*修复xinteger和xfloat类型以正确转换返回的数组。
*修复xs:导入具有相同命名空间的架构。
*更新解析器以不加载外部refe为xmlschema.xsd位置重新选择并添加import.bind()。
*添加架构医生-用于在运行时修补xsd。(请参见option.doc)
*修复python 2.6中的弃用警告。
*添加在<;element/>;上定义的@default的行为
*将@xsi:type值更改为始终符合doc/literal的条件。(还原0.3.5更改)。
*添加option.xstq选项以控制何时@xsi:type类型符合条件。
*添加option.xstq选项以控制何时@xsi:type类型符合条件。
*固定票:64,129,205,206,217,221,222,224,225,,,/>*添加http缓存。默认为(1)天。不适用于方法调用。有关详细信息,请参见:文档。
*删除了检查Fedora版本签入规范,因为不再构建<;fc9。
*更新了Makefile以使用tar.sh滚动tarball。
*将裸/包装的确定移到wsdl以获取文档/文本。
*将传输重构为包(提供更好地记录http头)。
*固定票证:207,209,210,212,214,215


0.3.4版(02-24-09):
*静态(自动)导入.绑定('http://schemas.xmlsoap.org/soap/encoding/'),
用户不再需要这样做。
*具有{{{usernamet的基本ws-securityoken}}和纯文本密码。
*通过传递字典添加对"稀疏"soap头的支持
*添加对任意用户定义的soap头的支持
*修复具有多个soap头项的服务操作。
*架构加载和取消引用算法增强s.
*嵌套soap multirefs fixed.
*对elementformdefault="unqualified"的更好(正确)支持提供了更多
准确的namespaing.
*wsdl部分类型不再默认为wsdl targetnamespace.
*固定票证:4,6,21,32,62,66,71,72,114,155,201.。

0.3.3版(11-31-08):
*不再安装(测试)包。
*实施API-3建议(https://fedorahosted.org/suds/wiki/api3proposal)
-可插入传输
-关键字方法参数
-默认传输中的BAISC HTTP身份验证
*添加soap消息中的命名空间前缀规范化。
*更好地修剪空节点的soap消息。
*固定票证:51-60




0.3.2版(11-7-08):
*soap{{{{{multiref}}}支持""(第一次通过添加了r300)'
*添加对新架构标记的支持:
*<;xs:include/>;
*<;xs:simplecontent/>;
*<;xs:group/>;
*<;xs:attributegroup/>;
*添加了对新xs的支持<;-->;python类型转换:
*xs:int
*xs:long
*xs:float
*xs:double
*修改封送拆收器和绑定进一步提高生成节点的命名空间。
*在架构加载期间,在"xsd"包dereference()中修复了无限递归。
*将对架构文件的<;wsdl:import/>;的支持添加到wsdl根<;definitions/>;
*修复(&;)的双重编码
*添加client api:
*setheaders()-与keyword相同,但适用于所有inv位置。
*add prefix()-命名空间前缀的映射。
*setlocation()-重写wsdl中的位置;除所有调用外,与关键字相同。
*setproxy()-与代理关键字相同,但对于所有调用。
*为soap头添加适当的命名空间前缀。
*fi固定票: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)、ambig都很满意。在没有端口限定的情况下调用then时,对方法
的ios引用在几乎所有
情况下都可以正常工作。所以,为什么不让suds选择端口呢?我们不要让用户在没有必要的时候做这件事。在大多数情况下,在0.2.9及更早版本上的使用在移动到0.3.1时不必像在0.3中那样更新代码。




0.3版(9-30-08):

*扩展了对0.2.9中引入的多端口服务的支持。这个附加的
提供了多个服务来定义*相同的*方法,sud将
正确地处理它。请参阅"具有多个端口的服务:"

*添加对多文档文档/文本soap绑定样式的支持。
请参阅"多文档文档文档/文本:"

*添加对(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以始终发送<;part/>;
在再次检查空间和用户输入之后引用的文档根,似乎引用的
元素始终是文档根。

*将对"binding"架构的支持添加到命名空间uri。
这适用于未指定schemaLocation但仍希望下载schema
的导入。例如:axis引用"http://schemas.xmlsoap.org/soap/encoding/"
而没有schemalocation。因此,通过这样做:
>;
>;从suds.xsd.sxbasic导入导入。
>;import.bind('http://schemas.xmlsoap.org/soap/encoding/')
>;
架构绑定到schemalocation并下载它。

*基本解组器不需要/模式/。
应该在重构过程中删除,但丢失了。

*更新客户端以传递kwargs to send()并添加/定位/kwarg以覆盖wsdl中的
服务位置。

*更新封送拆收器以不为表示元素的对象属性发出xml。
的ts和/或属性都是*可选的,值=无。
*更新factory(builder)以包含所有属性。
*向schemaobject添加可选的()方法。

*更新wsdl以覆盖操作中的命名空间(如果指定)。

*修复schema loa丁字问题-在处理导入之前生成所有架构。

*更新打包以准备提交给Fedora



0.2.7版(8-11-08):

*添加对文档/文本的检测/支持-包装和未包装。
*更新文档/文本{包装}将文档根目录(在<;body/>;下)设置为
包装元素(具有适当的命名空间)。
*添加对<;sequence/>;、<;all/>;和<;choice/>;的支持maxOccurs并具有
,这会导致解组器将包含在无限
集合中的元素的值设置为列表。
*更新client.factory(builder)以忽略<;choice/>;的子元素,因为"用户"确实需要
来决定要包含哪些子元素。e.
*更新展平算法以防止从导入架构中重新展平类型。
*对展平/合并算法的调整。



0.2.6版(8-5-08):

*修复XSD包大修期间损坏的枚举。
*修复票证24中定义的类型。
*修复方法签名中重复的参数名,如ticket 30中所报告的。
*sud被授权为lgpl。
*删除sud中的日志设置。*添加对client.factory.create()alt:syntax的支持,以便完全限定要生成为{namespace}name的类型。例如:client.factory.create('{http://blabla.com/ns}person')




0.2.5版(8-01-08):

*这种新的(合并)方法更简单,而且应该更可靠和可维护。此外,由于合并的模式通过字典查找执行查找,因此应该提供更好的性能。

builder.builder中的无限递归保护,用于包含自身的xsd类型。



0.2.4版(7-28-08):

*添加了对wsdl导入的支持:<;wsdl:import/>;
*添加了对xsd<;->;python类型转换的支持(感谢:nathan van gheem):
*xs:date
*xs:time
*xs:datetime
*已修复:
*bug:schema<;import/>;已指定schemaLocation。
*bug:service description中指定的命名空间在打印客户端/代理之前无效。



0.2.3版(7-23-08):

*opt限制。



0.2.2版(7-8-08):

*使用异常更新异常以使其更标准/python。uu init_uu()设置异常。根据票证14的建议,
将消息更新为
;更新绑定以提高WebFault传递(p)

*将绑定中的功能添加到HAN在返回的值中处理多个根节点;
作为复合对象返回,与返回列表时不同

*fix soapaction要用引号括起来

*add支持schemaobject中的<;xs:all/>;

*fix unbounded()方法

*r将架构默认到新(xsd)包中。文件太大了。将execute()添加到
查询中,并将suds改为execute()查询,而不是直接使用schema.find()。
同时,将hokey start()方法从架构中移动,以及查询增量。

*添加用于注入出站soap消息和/或入站回复消息的inject关键字。
重构soapclient并
1)将rename send()重命名为invoke()
2)拆分消息从invoke()发送并放在send()中;
添加testclient,它允许调用kwargs对消息进行inject={'msg=,并对消息进行reply='}和reply injection


*将命名空间类添加到sax以更好地管理命名空间行为;
将suds恢复到导入并使用命名空间

*更改用于解析引用类型(具有attributes@base=",@type=")的默认命名空间
,以便在未指定前缀时:使用xml(节点)namesapce而不是targetnamespace。

*应用davidclick@o定义的修复netw.org in ticket_13


*更新要打印的服务定义,以将服务方法显示为"my_method(xs:int arg0,person arg1)"
,而不是"my_method(arg0{xs:int},arg"1{person}),这更像是传统的方法签名

*将xsd/python类型转换添加到解组器(仅限xboolean);重构解组器以使用内容
类,该类使api更干净,增加了解组器和解组器之间的对称性,
用于基于架构属性的类型转换的良好机制

*使用附加程序重构封送拆收器;添加nobuiltin flag to resolve()以支持对
在绑定中返回的类型()和返回的集合()的修复。

*添加对(202204)http代码的支持

*add xboolean和映射;将findattr()添加到treeresolver中,以准备进行类型转换

*更新的架构和架构属性加载(已停止深度重复);更改了导入的架构,因此不再
复制导入的架构,而不是导入代理查找请求;添加ServiceDefinition类提供更好的服务检查;还提供命名空间映射和显示类型;简化了架构属性API;
支持添加的xs:any和xs:anytype;修复了一些架构查找问题;稍微重构了绑定类;
添加了ebug日志记录(可能需要注释一些以提高性能-一些参数很昂贵)。

*add sudsobject.property;属性是一个包含(值)属性的特殊对象,对于没有子级的架构类型,由
builder(factory)返回,例如s:<;element/>;和<;simpleType/>;;生成器、封送拆收器
和已更新以处理属性的解析器;解析器、架构也已更新以处理属性查找(丢失)


*为用户定义的soap头添加基础工作。

*修复elementformdefault每票证7

*从绑定中删除未使用的kwarg;在wsdl中缓存绑定;改造旧的serviceproxy以委托给{new}客户端api;
删除支持的关键字nil,以支持架构中<;element/>;上的"nillable"属性的自然处理

*add支持<;element/>;属性标志(nillable和form)

*添加代理(第二代api)类

*向该用户添加访问器/转换函数不需要访问x属性。
还添加to dic t()和get_items()以便轻松转换为dicrationary和iteration

*在深入查看schemaobject之前搜索@ref的顶级元素

*add derived()。这是为了确保所有派生类型(wsdl类)
都由xsi:type限定,而不象以前的sud版本那样为所有自定义类型指定xsi:type。更新文本封送拆收器以仅在需要指定类型
时添加xsi:type。


*更改sax中的ns提升以防止在父级具有前缀时ns提升为父级。

*changed binding returned_type()返回(未解析)元素

*为了支持新功能并修复报告的错误,
我正在重构并希望在提供输入/输出转换的sud中改进组件


*builder(translates:xsd objects=>;python objects)
*marshaller(translate:python objects=>;xml/soap)
*解组器(translate:soap/xml=>;python objects)


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

builder和解组器将生成python
(sudsobject.object的子类)对象具有:

*\u metadata\uuu.\uu type\uuu=xsd type(schemaobject)
*子类名称(\uu class\uu name\uu)=架构类型名称。





解组器将利用此标准信息
生成适当的输出(xml/soap)。

0.2.1代码的行为*主要*类似于此,但…不完全是这样。
而且,实现也有一些冗余。

在这样做的时候,将生成器、封送拆收器和解编器类使用的公共模式类型"查找"功能分解为"解析器"类的
层次结构是有意义的。这降低了构建器、封送拆收器和解编器类的复杂性和冗余度,并允许更好的模块化。一旦重构完成,文本/编码封送拆收器之间的差异就变得非常小。考虑到bindings.literal和bindings.encoded包中的代码量很小(而且越来越小)
,为了保持suds代码库的紧凑,我将所有的封送处理类移动到bindings.marshaller模块。
所有的bin将删除dings.xx子包。

净效果:


所有suds主要组件:

*客户端(旧的:服务代理)
*wsdl
*架构(xsd包)
*解析器
*输出(编组)
*builder
*输入(解组)


现在有更好的选择:

*模块性
*对象元数据的对称性。
*代码重用(希望有1%的代码重复)
*松散耦合

…更好地提供以下特性/错误修复:

*(修复)基于
<;schema elementformdefault=""/>;属性的适当xml元素限定级别。这将确保当
elementformdefault="qualified"时,sud将在
根元素上为文本绑定和编码绑定包含正确的命名空间。为了使这个
正常工作,文本封送拆收器(如编码封送拆收器)需要
能够识别模式类型。如果我添加了与
编码封送拆收器相同的模式类型查找,而不是上面描述的重构,那么这两个
类将几乎是彼此的完全副本:-(

*生成器和解组器使用schema.schema.find()
解析架构类型。他们将路径构造为"person.name.first"
,以在适当的上下文中解析类型。由于schema.find()是无状态的,
它在每次调用时都解析中间路径元素。新的解析器
类是有状态的,解析子类型*效率更高。

*防止sudsobject.object中的名称冲突,如items()方法。我已经将所有
方法(包括类方法)移动到一个工厂类中,该工厂类作为类attr(\uu factory)包含在对象类
中。既然*所有*属性都有python内置的命名,
我们就不应该再有名称冲突了。当然,这假设没有wsdl/schema
实体名将具有python内置命名约定的名称,但是我必须在某处画一条线:-)




0.2.1版(5-8-08):

*更新schema.py schemaProperty加载序列,以便chema分三步加载:
1)构建原始树。
2)解决依赖关系,如@ref和@base。
3)根据需要提升孙辈以使树变平(非规范化)。

wsdl也被更改为只加载一次架构并存储它。架构集合已在两个步骤中更改为加载架构:
1)创建所有原始架构对象。
2)加载架构。

这可确保在无序引用时可以找到本地<;import/>;'d架构。
sax.py元素接口已更改:attribute()替换为get()和set()。
此外,可以使用"getitem"和"setitem"访问属性值。
为sax.py更新了epydocs。还有…最后一个<;element ref=/>;现在得到了正确的支持。

*修复日志记录方式:不在suds中设置为info。;将日志记录程序(log)从类移动到模块,并使用日志记录程序名称。
注意:这意味着要启用soap message日志:
>;
>;logger('suds.serviceproxy')。setlevel(logging.debug)
>;
--而不是--
>;
>;logger('serviceproxy')。setlevel(logging.debug)
>;

*添加对(xsd)schema<;attribute/>;节点,主要影响生成器返回的对象

*update serviceproxy.py:将"代理"设置为记录调试而不是信息。

*增强schema\uu str\uu以显示原始XML和模型(主要用于调试)。



版本0.2(04-28-08):

*包含rpc/编码soap样式的第一个剪切。

*将属性类替换为suds.suds object.object。属性类是在很久以前开发的,目的略有不同。suds对象是一种更简单(更直接)的方法,它需要更少的代码,在调试器中工作得更好。

*绑定(和编码)是根据更符合wsdl的每个方法选择的。
在<;=0.1.7中,绑定是在构建serviceproxy并用于所有服务
方法时选择的。绑定存储为自绑定。由于wsdl为每个操作提供了单独的绑定样式和
编码,因此sud需要更改才能以相同的方式工作。

*使用**kwargs传递到服务代理的(支持nil)和(faults)标志。除了这些
标志之外,还添加了一个(http_proxy)标志并将其传递给urllib2.request对象。支持以下参数

*faults=引发服务器引发的错误(默认值:true),否则从服务方法调用返回元组
为(http代码,对象)。
*nil\u supported=绑定将在具有当此
标志为真时,E a值=无(默认值:真)。否则,将发送空节点<;x/>;。
*proxy=请求时指定的http代理(默认值:{})。
该代理定义为{protocol:proxy,}


*支持http代理(见上文)。

*serviceproxy重构为委托给soapclient。由于服务代理通过getattr()公开web服务,
service proxy类提供的任何属性(包括方法)都隐藏由
wsdl定义的ws操作。因此,通过将所有内容移动到soapclient,wsdl操作将不再隐藏,而不需要
为服务代理中的属性和方法使用*hoky*名称。相反,服务代理具有
uu client_uuu和uuu factory_uuu属性(它们确实应该处于名称冲突的低风险)。目前还没有移动
get_instance()和get_enum()方法来保持向后兼容性。不过,
首选的api更改将替换:

>;service=serviceproxy('myurl')
>;person=service.get_instance('person')

…使用类似于…

>;service=serviceproxy('myurl')
>;person=service.\uu factory\uu.get\u instance('person')

这是一个大写的通知。

*修复了wsdl不存在的问题定义一个<;schema/>;节,suds无法解析
http://www.w3.org/2001/xmlschema命名空间的前缀以检测内置类型,如(xs:string)。




version-0.1.7(04-08-08):

*添加了binding.nil来控制属性值的方式(out)=无,处理空标记(in)。
*service.binding.nil_supported=true--表示属性值=none被封送(out)为
<;x xsi:nil=true/>;<;x/>;被封送为"",而<;x xsi:nil/>;被封送为none。
*service.binding.nil_supported=false——表示属性值=none被封送(out)为
<;x/>;,而<;x/>;*和*<;x xsi:nil=true/>;被封送为none。
xsi:nil被真正忽略。
*默认值为(true)

*sax处理程序被更新为处理多个当sax解析器"分块"文本时,e character()回调。
当node.text为none时,node.text设置为字符。否则,将追加字符。
谢谢-andrea.spinelli@imteam.it

*将特殊(文本)属性替换为"文本",以允许名为"文本"的自然元素

*将Unicode支持添加为:
*将"Unicode"添加到所有具有"str"的类str()使用unicode()调用。
*\u str\uuu()返回编码为utf-8的"unicode"的结果。

*编码为utf-8的XML输出与http头匹配并支持Unicode。

*schemacollection更改为提供内置()和自定义()方法。为了支持这一点,findPrefixes()被添加到sax.py中的
元素中。无论如何,这是一种更好的方法,因为wsdl和模式可能有许多前缀
指向http://www.w3.org/2001/xmlschema。使用doc/lit和rpc/lit绑定进行测试

*从document&rpc到literal&;encoded的重构绑定包

*包含以下*完整*命名空间支持:

*命名空间前缀不再从属性值中剥离
在wsdl中定义的引用类型。
*使用<;import/>;导入的架构应根据需要正确处理命名空间和前缀映射和重新映射。
*使用完全限定(w/命名空间)查找解析所有类型。
*schema.get_type()支持带和不带ns前缀的路径。如果未指定前缀
,则使用架构的目标命名空间匹配类型。

*属性按添加的顺序维护属性名称(键)。这也意味着
get_item()和get_names()返回有序值。
(不过,我怀疑排序确实需要在封送拆收器中使用wsdl/schema中指定的
顺序来完成)

schema.py的主要重构。主要目标是分离
完全由命名空间限定的类型查找。完成后,属性值上的前缀将不再被删除(清除)。
更改摘要:
1)在初始化时而不是按需创建的schemaProperty覆盖类。
2)由新导入类而不是架构执行的架构导入。
3)架构加载使用工厂的顶级属性。
4)所有schemaproperty/children/list都按schemaproperty派生类中的cmp进行排序。
这可确保按以下顺序解析具有相同名称的类型(import、complex、simple、element)。
5)all/children/schemaproperty列表是在初始化处而不是按需构建的。
6)schemaGroup创建并更新了wsdl类。这比让wsdl聚合<;schema/>;
节点更好,这些节点断开与具有命名空间前缀映射的wsdl父元素的链接。
7)<;import/>;元素在命名空间重映射和前缀重映射中都能正确处理。执行导入架构的
targetnamespace和相关前缀映射。
例如:schmea-a的前缀(tns)映射为xmlns:tns=http://nsa,targetnamespace=http://nsa。
schema-b正在导入架构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的所有元素:必须更新某些内容才能
type=abc:这样才能解决某些问题。

*修复了将节点添加到属性as(文本、值)的解组问题。这是在重构绑定时引入的。


*修复了各种属性打印问题。


注意:

N-0.1.6(03-06-08):

*提供对包含
xsd架构导入的架构节的wsdl的正确处理:<;import namespace=""schemalocation=""?&。
引用的架构在指定架构位置时导入。
*引发尚未处理的http状态代码的异常。




version-0.1.5(02-21-08):

*提供按分层名称更好地登录模块get logger。
*根据需要进行重构要真正支持其他绑定,
*添加替换elementtree的sax模块。这样做更快、更简单,而且
可以正确处理名称空间(前缀)。



version-0.1.4(12-21-07):

*提供服务方法参数为none。
*添加对属性列表
对象的方法参数的正确处理。



版本0.1.3(12-19-07):

*修复了以下问题:当documentreader使用<;2
值映射时,标记为集合(maxOccurs>;1)的节点不
创建值为[]的属性对象。由于缺少bindings.document.replyhint.stripns()(它使用documentreader.stripns())
转换为documentreader.stripn(),现在返回一个元组(ns,标记)作为0.1.2的





version-0.1.2(12-18-07):

roperty添加:
*元数据支持
*覆盖:uugetitem_uuu,uusetitem_uuu,uu contans_uuu
*更改属性(reader writer)以使用属性。元数据
处理xml文档的命名空间。
*修复setup.py需要。


version-0.1.1(12-17-07):

此版本是Fedora托管的第一个版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从数组中打印int值?   prepared语句Java中奇怪的异常PreparedStatement:参数索引超出范围   封装如何在OOP Java中为主方法编码?   java某些手机显示快捷方式徽章需要什么权限?   java TextView不会随OnItemSelectedListener更改   java注释处理器不会自动触发吗?   java Spring JPA如何计算外键数   c#对于这个简单的OOAD问题,哪种设计最优雅?   java如何处理while循环中的异常?   Android Studio错误:进程'command'/home/draven/Downloads/安卓studio/jre/bin/java''结束,退出值为非零2   在使用Payara服务器的Vaadin应用程序中导航到根目录时,java将丢失上下文根目录   使用contentType application/json而不是application/jsonpatch+json的java修补程序   带有tomcat的java HAproxy连接不足   Java:在应用过滤器后创建一个简单的通用方法进行计数   java如何使用多态性创建一个实例化对象的方法,然后用它们高效地填充ArrayList?