refactoring

This commit is contained in:
Devaev Maxim 2020-05-29 07:15:04 +03:00
parent 0ead2f45cf
commit ef8b6cfda5
2 changed files with 13 additions and 11 deletions

View File

@ -24,17 +24,19 @@ from ...validators import ValidatorError
# ===== # =====
class HttpError(Exception): class HttpError(Exception):
pass def __init__(self, msg: str, status: int) -> None:
super().__init__(msg)
self.status = status
class UnauthorizedError(HttpError): class UnauthorizedError(HttpError):
def __init__(self) -> None: def __init__(self) -> None:
super().__init__("Unauthorized") super().__init__("Unauthorized", 401)
class ForbiddenError(HttpError): class ForbiddenError(HttpError):
def __init__(self) -> None: def __init__(self) -> None:
super().__init__("Forbidden") super().__init__("Forbidden", 403)
# ===== # =====
@ -126,11 +128,14 @@ def make_json_response(
return response return response
def make_json_exception(err: Exception, status: int) -> aiohttp.web.Response: def make_json_exception(err: Exception, status: Optional[int]=None) -> aiohttp.web.Response:
name = type(err).__name__ name = type(err).__name__
msg = str(err) msg = str(err)
if not isinstance(err, (UnauthorizedError, ForbiddenError)): if isinstance(err, HttpError):
status = err.status
else:
get_logger().error("API error: %s: %s", name, msg) get_logger().error("API error: %s: %s", name, msg)
assert status is not None, err
return make_json_response({ return make_json_response({
"error": name, "error": name,
"error_msg": msg, "error_msg": msg,

View File

@ -65,8 +65,7 @@ from .logreader import LogReader
from .streamer import Streamer from .streamer import Streamer
from .wol import WakeOnLan from .wol import WakeOnLan
from .http import UnauthorizedError from .http import HttpError
from .http import ForbiddenError
from .http import HttpExposed from .http import HttpExposed
from .http import exposed_http from .http import exposed_http
from .http import exposed_ws from .http import exposed_ws
@ -280,10 +279,8 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
return make_json_exception(err, 409) return make_json_exception(err, 409)
except (ValidatorError, OperationError) as err: except (ValidatorError, OperationError) as err:
return make_json_exception(err, 400) return make_json_exception(err, 400)
except UnauthorizedError as err: except HttpError as err:
return make_json_exception(err, 401) return make_json_exception(err)
except ForbiddenError as err:
return make_json_exception(err, 403)
app.router.add_route(exposed.method, exposed.path, wrapper) app.router.add_route(exposed.method, exposed.path, wrapper)
async def __on_shutdown(self, _: aiohttp.web.Application) -> None: async def __on_shutdown(self, _: aiohttp.web.Application) -> None: