fix: 'Error' class
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user