首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用spyne返回XLS文件?

如何用spyne返回XLS文件?
EN

Stack Overflow用户
提问于 2016-07-12 09:33:46
回答 1查看 300关注 0票数 0

我试图通过使用spyne创建的webservice返回XLS文件。

这是我的密码,现在,我不知道该怎么做。

代码语言:javascript
复制
@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。

编辑:

这就是出现的那个AssertionError:

代码语言:javascript
复制
 * 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 -
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-13 10:02:11

最好的方法是将返回类型设置为File (文档)并返回File.Value对象。

就你的情况而言,这意味着:

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

但是,由于2.12中有一个bug,您不能这样做。作为解决办法,您可以执行以下操作:

代码语言:javascript
复制
@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-alpha:

代码语言:javascript
复制
pip install -e git://github.com/arskom/spyne.git@spyne-2.13.0-alpha#egg=spyne
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38325034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档