如何用spyne return XLS文件?
How to return XLS file with spyne?
我正在尝试 return 通过使用 spyne 创建的网络服务来处理 XLS 文件。
这是我的代码,现在,我不知道该怎么做..
@spyne.srpc(Unicode, _returns=Iterable(Unicode))
def Function(A):
GetXLS(A)
kalist = open("file.xls", 'r');
return kalist
最重要的是最后两行。:)
我在考虑这个问题:是否可以 return 使用 spyne 生成 xls 文件,或者我应该对那个 xls 做些什么然后 return 那个?
谢谢大家的回答
PS:那个 xls 来自 BLOB 文件(来自 Oracle DB),所以,如果需要,我也有 BLOB..
编辑:
这是出现的断言错误:
* 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 -
最好的方法是将 return 类型设置为 File
(docs) 和 return 一个 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');
但是,由于 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()
调用由于某种原因抛出,这将失败并返回 "Internal Error"。如果您不希望这种情况发生,您必须围绕 open()
调用手动执行您自己的异常处理。如果您完全关心 python3 兼容性,还应确保以二进制模式打开文件。
对于 2.13 及更高版本(尚未发布),您将不需要此解决方法。如果您喜欢冒险,可以通过以下方式安装 2.13.0-alpha:
pip install -e git://github.com/arskom/spyne.git@spyne-2.13.0-alpha#egg=spyne
我正在尝试 return 通过使用 spyne 创建的网络服务来处理 XLS 文件。
这是我的代码,现在,我不知道该怎么做..
@spyne.srpc(Unicode, _returns=Iterable(Unicode))
def Function(A):
GetXLS(A)
kalist = open("file.xls", 'r');
return kalist
最重要的是最后两行。:)
我在考虑这个问题:是否可以 return 使用 spyne 生成 xls 文件,或者我应该对那个 xls 做些什么然后 return 那个?
谢谢大家的回答
PS:那个 xls 来自 BLOB 文件(来自 Oracle DB),所以,如果需要,我也有 BLOB..
编辑:
这是出现的断言错误:
* 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 -
最好的方法是将 return 类型设置为 File
(docs) 和 return 一个 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');
但是,由于 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()
调用由于某种原因抛出,这将失败并返回 "Internal Error"。如果您不希望这种情况发生,您必须围绕 open()
调用手动执行您自己的异常处理。如果您完全关心 python3 兼容性,还应确保以二进制模式打开文件。
对于 2.13 及更高版本(尚未发布),您将不需要此解决方法。如果您喜欢冒险,可以通过以下方式安装 2.13.0-alpha:
pip install -e git://github.com/arskom/spyne.git@spyne-2.13.0-alpha#egg=spyne