我正在尝试覆盖flask_jsonrpc的格式化程序方法:
from flask_jsonrpc import exceptions
def override_jsonrpc_error_formatter(app):
@property
def json_rpc_format(self):
return ErrorFormatter.format_error(self)
exceptions.Error.json_rpc_format = json_rpc_format
然后会在另一个文件中调用override_jsonrpc_error_formatter 函数。
一切正常,但是pycharm向我显示了最后一个字符串的警告,说:“无法设置属性json_rpc_format”。为什么会这样呢?我需要以其他方式覆盖它吗?
答案 0 :(得分:0)
您需要阅读有关setters
的信息在这种情况下,我会做类似的事情:
class CustomError(Error):
@property
def json_rpc_format(self):
return self._json_rpc_format
@json_rpc_format.setter
def json_rpc_format(self, value):
self._json_rpc_format = value
答案 1 :(得分:0)
因此,您可以从flask_jsonrpc
包中导入例外。
在包装中,您可以找到these lines:
class Error(Exception):
"""Error class based on the JSON-RPC 2.0 specs
http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal
code - number
message - string
data - object
status - number from http://groups.google.com/group/json-rpc/web/json-rpc-over-http JSON-RPC over HTTP Errors section
"""
code = 0
message = None
data = None
status = 200
def __init__(self, message=None, code=None, data=None):
"""Setup the Exception and overwrite the default message
"""
super(Error, self).__init__()
if message is not None:
self.message = message
if code is not None:
self.code = code
if data is not None:
self.data = data
@property
def json_rpc_format(self):
"""Return the Exception data in a format for JSON-RPC
"""
error = {
'name': text_type(self.__class__.__name__),
'code': self.code,
'message': '{0}'.format(text_type(self.message)),
'data': self.data
}
if current_app.config['DEBUG']:
import sys, traceback
error['stack'] = traceback.format_exc()
error['executable'] = sys.executable
return error
因此,基本上,您正在尝试从flask_jsonrpc
包覆盖Error类的属性,这是不允许的,因为这是不可设置的属性。
如果您想覆盖它,我认为您应该使用其他类从它继承,并直接将其导入或将其连接回模块。
例如:
class myCustomError(exceptions.Error):
@property
def json_rpc_format(self):
return do_some_custom_logic_here()