hobbit_core.response 源代码

from typing import Optional, Any
from mypy_extensions import TypedDict

from flask.json import dumps
from werkzeug import Response

RESP_MSGS = {
    401: '未登录',
    403: '未授权',
    404: '不正确的链接地址',
    422: '请求数据校验失败',

    500: '服务器内部错误',
}


class RespType(TypedDict):
    code: str
    message: str
    detail: Any


[文档]def gen_response(code: int, message: str = '', detail: Optional[str] = None) \ -> RespType: """Func for generate response body. Args: code (string, int): Extension to interact with web pages. Default is \ http response ``status_code`` like 200、404. message (string): For popup windows. detail (object): For debug, detail server error msg. Returns: dict: A dict contains all args. """ return { 'code': str(code), 'message': message or RESP_MSGS.get(code, '未知错误'), # type: ignore 'detail': detail, }
[文档]class Result(Response): """Base json response. """ status = 200 # type: ignore def __init__(self, response=None, status=None, headers=None, mimetype='application/json', content_type=None, direct_passthrough=False): assert sorted(response.keys()) == ['code', 'detail', 'message'], \ 'Error response, must include keys: code, detail, message' super(Result, self).__init__( response=dumps(response, indent=0, separators=(',', ':')) + '\n', status=status or self.status, headers=headers, mimetype=mimetype, content_type=content_type, direct_passthrough=direct_passthrough)
[文档]class SuccessResult(Result): """Success response. Default status is 200, you can cover it by status arg. """ status = 200 def __init__(self, message: str = '', code: Optional[int] = None, detail: Any = None, status: Optional[int] = None): super(SuccessResult, self).__init__( gen_response(code or self.status, message, detail), status or self.status)
[文档]class FailedResult(Result): """Failed response. status always 400. """ status = 400 def __init__(self, message: str = '', code: Optional[int] = None, detail: Any = None): super(FailedResult, self).__init__( gen_response(code or self.status, message, detail), self.status)
[文档]class UnauthorizedResult(FailedResult): status = 401
[文档]class ForbiddenResult(FailedResult): status = 403
[文档]class ValidationErrorResult(FailedResult): status = 422
[文档]class ServerErrorResult(FailedResult): status = 500