2016-07-12 72 views
0

我想通過使用spyne創建的webservice返回XLS文件。如何使用spyne返回XLS文件?

這裏是我的代碼,現在,我不知道該怎麼辦..

@spyne.srpc(Unicode, _returns=Iterable(Unicode))  
def Function(A): 
    GetXLS(A)  
    kalist = open("file.xls", 'r'); 
    return kalist 

最重要的線是去年2 :)

我想這一點:它是可能返回spyne xls文件,或者我應該用xls做些什麼,然後返回?

感謝您對所有的答案

PS:這是XLS從BLOB文件(從Oracle DB),所以,如果需要的話,我有BLOB太..

編輯:

這是Asse田是出現了:

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 
127.0.0.1 - - [14/Jul/2016 07:15:19] "GET /soap/oracleservice?wsdl HTTP/1.1" 200 - 
ERROR:spyne.util: 
Traceback (most recent call last): 
    File "C:\Python27\lib\site-packages\spyne\util\__init__.py", line 120, in start 
    next(ret) 
    File "C:\Python27\lib\site-packages\spyne\protocol\xml.py", line 782, in _get_members_etree 
    sub_name) 
    File "C:\Python27\lib\site-packages\spyne\protocol\xml.py", line 463, in to_parent 
    return handler(ctx, cls, inst, parent, ns, *args, **kwargs) 
    File "C:\Python27\lib\site-packages\spyne\protocol\xml.py", line 616, in modelbase_to_parent 
    elt.text = self.to_unicode(cls, inst) 
    File "C:\Python27\lib\site-packages\spyne\protocol\_outbase.py", line 211, in to_unicode 
    return handler(class_, value, *args, **kwargs) 
    File "C:\Python27\lib\site-packages\spyne\protocol\_outbase.py", line 441, in file_to_unicode 
    return self.file_to_string(cls, value, suggested_encoding) 
    File "C:\Python27\lib\site-packages\spyne\protocol\_outbase.py", line 421, in file_to_string 
    assert False 
AssertionError 
127.0.0.1 - - [14/Jul/2016 07:15:21] "POST /soap/oracleservice HTTP/1.1" 200 - 
INFO:werkzeug:127.0.0.1 - - [14/Jul/2016 07:15:21] "POST /soap/oracleservice HTTP/1.1" 200 - 

回答

0

做到這一點,最好的辦法就是返回類型設置爲Filedocs)並返回一個File.Value對象。

對於你的情況,這意味着:

@spyne.rpc(Unicode, _returns=File)  
def kalibracniList(ctx, MEC): 
    from OracleDB import VraceniListu 
    VraceniListu(MEC); 
    sleep(1) 
    return File.Value(path='FILE_NAME.xls'); 

但是,由於一個bug在2.12,你不能做到這一點。你可以做以下的解決方法:

@spyne.rpc(Unicode, _returns=File)  
def kalibracniList(ctx, MEC): 
    from OracleDB import VraceniListu 
    VraceniListu(MEC); 
    sleep(1) 
    return File.Value(handle=open('FILE_NAME.xls', 'rb')); 

注意,如果open()呼叫會因某種原因,這將失敗,「內部錯誤」。如果您不希望發生這種情況,則必須手動在open()調用周圍進行自己的異常處理。如果你關心python3兼容性,你還應該確保以二進制模式打開文件。

對於2.13及更高版本(尚未發佈),您不需要此解決方法。如果你喜歡冒險,你可以通過安裝2.13.0-α:

pip install -e git://github.com/arskom/[email protected]#egg=spyne 
+0

你好,謝謝你的回答。但我有一個問題,當我試圖把它和你一樣,Asse田出現。你知道這裏的含義嗎? –

+0

除非你告訴我,否則我不知道錯誤是什麼。 –

+0

我編輯的問題,這是什麼出現。 –