簡體   English   中英

使用Python Spyne(RPC)是否可以返回本地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]。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM