2016-07-12 73 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

我编辑的问题,这是什么出现。 –