mirror of
https://github.com/arcan1s/ffxivbis.git
synced 2025-07-07 02:45:52 +00:00
43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
#
|
|
# Copyright (c) 2019 Evgeniy Alekseev.
|
|
#
|
|
# This file is part of ffxivbis
|
|
# (see https://github.com/arcan1s/ffxivbis).
|
|
#
|
|
# License: 3-clause BSD, see https://opensource.org/licenses/BSD-3-Clause
|
|
#
|
|
import json
|
|
|
|
from aiohttp.web import HTTPException, Response
|
|
from typing import Any, Mapping, List
|
|
|
|
from .json import HttpEncoder
|
|
|
|
|
|
def make_json(response: Any) -> str:
|
|
return json.dumps(response, cls=HttpEncoder, sort_keys=True)
|
|
|
|
|
|
def wrap_exception(exception: Exception, args: Mapping[str, Any], code: int = 500) -> Response:
|
|
if isinstance(exception, HTTPException):
|
|
raise exception # reraise return
|
|
return wrap_json({
|
|
'message': repr(exception),
|
|
'arguments': dict(args)
|
|
}, code)
|
|
|
|
|
|
def wrap_invalid_param(params: List[str], args: Mapping[str, Any], code: int = 400) -> Response:
|
|
return wrap_json({
|
|
'message': f'invalid or missing parameters: `{params}`',
|
|
'arguments': dict(args)
|
|
}, code)
|
|
|
|
|
|
def wrap_json(response: Any, code: int = 200) -> Response:
|
|
return Response(
|
|
text=make_json(response),
|
|
status=code,
|
|
content_type='application/json'
|
|
)
|