使用 Python Spyne (RPC) 是否有办法 return 原生 python 列表而不是花哨的 Array 或 Iterable?
Using Python Spyne (RPC) is there a way to return a native python list instead of the fancy Array or Iterable?
Iterable 和 Array 类型似乎都隐藏了一个本地列表,但我发现自己总是在做这样的事情:
myList = service.fetchRemoteList()[0][1]
哪里fetchRemoteList() _returns=Iterable(String)
我不想将 [0][1] 放在所有列表函数调用的末尾。
这需要至少在讨论数组时在网站上记录,或者更现实地说,这需要是默认行为根据 'principle of least astonishment'.
很难找到以下划线开头的小变量,您可以使用名为“_body_style”的变量,当设置为字符串文字 'bare' 时,它似乎可以正常工作正常工作:
@srpc(_returns=Array(String),_body_style='bare')
def fetchRemoteList():
yield "Item1"
yield "Item2"
Spyne 默认使用包装数组,因为 XML 世界上的其他人都是这样做的。
包装数组:
<users>
<User>
<id>1</id>
<name>Batman</name>
</User>
<User>
<id>2</id>
<name>Robin</name>
</User>
</users>
裸数组:
<users>
<id>1</id>
<name>Batman</name>
</users>
<users>
<id>2</id>
<name>Robin</name>
</users>
您可能明白为什么现在每个人都更喜欢包装数组了。这是一个约定俗成的问题,但肯定是有帮助的。另外,无法对非包装数组进行多态处理。
Spyne 也默认使用包装函数,因为在裸模式下不可能有多个参数/return 值。
现在答案:
这是一个包装数组:
Array(Unicode)
这是等效的裸数组:
Unicode(max_occurs='unbounded')
在2.12中,也可以将wrapped=False
传给Array得到裸数组。
例如:
Array(Unicode, wrapped=False)
正如您所发现的,您可以获得通过 _body_style='bare'
的裸函数
至 @rpc
.
一些 SOAP 客户端通过简单的启发式方法 function/array 发现它是什么类型,并为您省去使用魔术索引的麻烦。显然肥皂水不是其中之一。
Iterable 和 Array 类型似乎都隐藏了一个本地列表,但我发现自己总是在做这样的事情:
myList = service.fetchRemoteList()[0][1]
哪里fetchRemoteList() _returns=Iterable(String)
我不想将 [0][1] 放在所有列表函数调用的末尾。
这需要至少在讨论数组时在网站上记录,或者更现实地说,这需要是默认行为根据 'principle of least astonishment'.
很难找到以下划线开头的小变量,您可以使用名为“_body_style”的变量,当设置为字符串文字 'bare' 时,它似乎可以正常工作正常工作:
@srpc(_returns=Array(String),_body_style='bare')
def fetchRemoteList():
yield "Item1"
yield "Item2"
Spyne 默认使用包装数组,因为 XML 世界上的其他人都是这样做的。
包装数组:
<users>
<User>
<id>1</id>
<name>Batman</name>
</User>
<User>
<id>2</id>
<name>Robin</name>
</User>
</users>
裸数组:
<users>
<id>1</id>
<name>Batman</name>
</users>
<users>
<id>2</id>
<name>Robin</name>
</users>
您可能明白为什么现在每个人都更喜欢包装数组了。这是一个约定俗成的问题,但肯定是有帮助的。另外,无法对非包装数组进行多态处理。
Spyne 也默认使用包装函数,因为在裸模式下不可能有多个参数/return 值。
现在答案:
这是一个包装数组:
Array(Unicode)
这是等效的裸数组:
Unicode(max_occurs='unbounded')
在2.12中,也可以将
wrapped=False
传给Array得到裸数组。 例如:Array(Unicode, wrapped=False)
正如您所发现的,您可以获得通过
_body_style='bare'
的裸函数 至@rpc
.
一些 SOAP 客户端通过简单的启发式方法 function/array 发现它是什么类型,并为您省去使用魔术索引的麻烦。显然肥皂水不是其中之一。