使用Python Spyne(RPC)有没有办法返回本机python列表而不是花哨的数组或Iterable?

时间:2015-07-01 23:56:08

标签: python spyne

Iterable和Array类型似乎都隐藏了一个本机列表,但我发现自己总是这样做:

myList = service.fetchRemoteList()[0][1] 

fetchRemoteList() _returns=Iterable(String)

我不想在所有列表函数调用结束时放置[0] [1]。

2 个答案:

答案 0 :(得分:1)

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默认使用包装函数,因为在裸模式下不可能有多个参数/返回值。

现在回答:

  • 这是一个包装数组:

    Array(Unicode)
    

    这是等效的裸阵列:

    Unicode(max_occurs='unbounded')
    

    在2.12中,您还可以将wrapped=False传递给Array以获取裸阵列。 例如:

    Array(Unicode, wrapped=False)
    
  • 正如您所发现的那样,您可以通过_body_style='bare'传递裸功能 到@rpc

一些SOAP客户端通过简单的启发式方法发现它是什么类型的函数/数组,并省去了使用魔术索引的麻烦。显然肥皂水不是其中之一。

答案 1 :(得分:-1)

在讨论数组时,至少需要在网站上记录,或者更实际的是,这需要是默认行为符合原则最不惊讶的是。

很难找到一个以你可以使用的下划线开头的小变量叫做&#39; _body_style&#39;当设置为字符串文字&#39;裸&#39;它看起来像你期望的那样正常工作:

@srpc(_returns=Array(String),_body_style='bare')    
def fetchRemoteList():
    yield "Item1"
    yield "Item2"