[英]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]。
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客戶端通過簡單的啟發式方法發現它是什么類型的函數/數組,並為您節省了使用魔術索引的麻煩。 顯然,泡沫不是其中之一。
討論數組時,至少需要在網站上記錄下來 ,或者更實際地, 這必須是 “最小驚訝原則”的默認行為 。
很難找到一個以下划線開頭的小變量,稱為“ _body_style”,當設置為字符串文字“ bare”時,它似乎可以正常工作:
@srpc(_returns=Array(String),_body_style='bare')
def fetchRemoteList():
yield "Item1"
yield "Item2"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.