gpt4 book ai didi

python - 我如何在 spyne 中使用装饰器继承类

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:12 26 4
gpt4 key购买 nike

我正在尝试继承这样的装饰类

class SOAPCategoy(ComplexModel):
id = Integer
CategoyName = Unicode

class SOAPServiceBase(ServiceBase):
@rpc(Integer, _returns=SOAPSeller)
def Item(self, pId):
....
return SOAPCategory()

class SOAPCategoryService(SOAPServiceBase):
pass

.
.
.
wsgi_app = wsgi_soap_application([SOAPCategoryService], 'test.soap')

然后它抛出一个错误:

File "...spyne/interface/xml_schema/_base.py", line 186, in build_validation_schema
f = open('%s/%s.xsd' % (tmp_dir_name, pref_tns), 'r')
IOError: [Errno 2] No such file or directory: '/tmp/spyne9y_uw9/tns.xsd'

部分_base.py源码

def build_validation_schema(self):
"""Build application schema specifically for xml validation purposes."""

self.build_schema_nodes(with_schema_location=True)

pref_tns = self.interface.get_namespace_prefix(self.interface.tns)
tmp_dir_name = tempfile.mkdtemp(prefix='spyne')
logger.debug("generating schema for targetNamespace=%r, prefix: "
"%r in dir %r" % (self.interface.tns, pref_tns, tmp_dir_name))

# serialize nodes to files
for k, v in self.schema_dict.items():
file_name = '%s/%s.xsd' % (tmp_dir_name, k)
f = open(file_name, 'wb')
etree.ElementTree(v).write(f, pretty_print=True)
f.close()
logger.debug("writing %r for ns %s" % (file_name,
self.interface.nsmap[k]))

f = open('%s/%s.xsd' % (tmp_dir_name, pref_tns), 'r')

最佳答案

Spyne 旨在防止您对 ServiceBase 子级使用继承。您必须使用组合。

class SOAPServiceBase(ServiceBase):
@rpc(Integer, _returns=SOAPSeller)
def Item(self, pId):
# ....
return SOAPCategory()

class SOAPCategoryService(ServiceBase):
# ...

wsgi_app = wsgi_soap_application([SOAPServiceBase, SOAPCategoryService], 'test.soap')

如果您需要从不同端点导出相同的服务包,您应该这样做:

def TSoapServiceBase():
class SOAPServiceBase(ServiceBase):
@rpc(Integer, _returns=SOAPSeller)
def Item(self, pId):
# ....
return SOAPCategory()

return SOAPServiceBase

some_app = wsgi_soap_application([TSoapServiceBase()], 'test.soap')
some_other_app = wsgi_soap_application([TSoapServiceBase()], 'test.soap')
# etc...

关于python - 我如何在 spyne 中使用装饰器继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18934514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com