fix: 'Error' class

This commit is contained in:
2026-04-29 16:31:26 +08:00
parent bf54e41f28
commit 6829750f01

View File

@@ -33,18 +33,18 @@ class Request[T]:
varnames = handler.__code__.co_varnames varnames = handler.__code__.co_varnames
if self.params is None: if self.params is None:
if argcount > 0: raise self.ParamsError() if argcount > 0: raise self.ParamsError(None)
return handler() return handler()
if isinstance(args, list): if isinstance(args, list):
if len(args) != argcount: raise self.ParamsError() if len(args) != argcount: raise self.ParamsError(args)
return handler(*args) return handler(*args)
if isinstance(args, dict): if isinstance(args, dict):
if args.keys() != set(varnames): raise self.ParamsError() if args.keys() != set(varnames): raise self.ParamsError(args)
return handler(**args) return handler(**args)
raise TypeError() raise TypeError(repr(args))
class Response[T]: class Response[T]:
def __init__(self, id: str|int, inner: T): def __init__(self, id: str|int, inner: T):
@@ -60,23 +60,24 @@ class Response[T]:
data['result'] = self.inner data['result'] = self.inner
return json.dumps(data) return json.dumps(data)
class Error(Enum): class Error:
def __init__(self, code, data=None):
self.code: Error.Code = code
self.data = data
class Code(Enum):
PARSE_ERROR = -32700 PARSE_ERROR = -32700
INVALID_REQUEST = -32600 INVALID_REQUEST = -32600
METHOD_NOT_FOUND = -32601 METHOD_NOT_FOUND = -32601
INVALID_PARAMS = -32602 INVALID_PARAMS = -32602
INTERNAL_ERROR = -32603 INTERNAL_ERROR = -32603
def __init__(self, *args):
super().__init__(*args)
self.data = None
def message(self) -> str: def message(self) -> str:
return self.name.capitalize().replace('_', ' ') return self.code.name.capitalize().replace('_', ' ')
def response(self): def response(self):
result = dict() result = dict()
result['code'] = self.value result['code'] = self.code.value
result['message'] = self.message() result['message'] = self.message()
if self.data is not None: if self.data is not None:
result['data'] = self.data result['data'] = self.data
@@ -123,23 +124,23 @@ async def handler(request: ws.WebSocketRequest):
mid = inbound.id mid = inbound.id
res = inbound.fulfill() res = inbound.fulfill()
except json.decoder.JSONDecodeError as e: except json.decoder.JSONDecodeError as e:
err = Error.PARSE_ERROR err = Error(Error.Code.PARSE_ERROR)
exc = e exc = e
except Request.ParamsError as e: except Request.ParamsError as e:
err = Error.INVALID_PARAMS err = Error(Error.Code.INVALID_PARAMS)
exc = e exc = e
except TypeError as e: except TypeError as e:
err = Error.INVALID_REQUEST err = Error(Error.Code.INVALID_REQUEST)
exc = e exc = e
except KeyError as e: except KeyError as e:
err = Error.METHOD_NOT_FOUND err = Error(Error.Code.METHOD_NOT_FOUND)
err.data = str(e).strip("'") err.data = str(e).strip("'")
exc = e exc = e
except ws.ConnectionClosed as e: except ws.ConnectionClosed as e:
logger.critical('Going away', exc_info=e) logger.critical('Going away', exc_info=e)
return return
except Exception as e: except Exception as e:
err = Error.INTERNAL_ERROR err = Error(Error.Code.INTERNAL_ERROR)
exc = e exc = e
if err is not None: logger.error(err.message(), exc_info=exc) if err is not None: logger.error(err.message(), exc_info=exc)