Spaces:
Running
Running
File size: 3,077 Bytes
5564ecb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Any, Generic, TypeVar
from fastapi import Response
from pydantic import BaseModel, Field
from common.response.response_code import CustomResponse, CustomResponseCode
from utils.serializers import MsgSpecJSONResponse
SchemaT = TypeVar('SchemaT')
class ResponseModel(BaseModel):
"""
@router.get('/test', response_model=ResponseModel)
def test():
return ResponseModel(data={'test': 'test'})
@router.get('/test')
def test() -> ResponseModel:
return ResponseModel(data={'test': 'test'})
@router.get('/test')
def test() -> ResponseModel:
res = CustomResponseCode.HTTP_200
return ResponseModel(code=res.code, msg=res.msg, data={'test': 'test'})
"""
code: int = Field(CustomResponseCode.HTTP_200.code, description='Return status code')
msg: str = Field(CustomResponseCode.HTTP_200.msg, description='Return message')
data: Any | None = Field(None, description='Return data')
class ResponseSchemaModel(ResponseModel, Generic[SchemaT]):
"""
@router.get('/test', response_model=ResponseSchemaModel[GetApiDetail])
def test():
return ResponseSchemaModel[GetApiDetail](data=GetApiDetail(...))
@router.get('/test')
def test() -> ResponseSchemaModel[GetApiDetail]:
return ResponseSchemaModel[GetApiDetail](data=GetApiDetail(...))
@router.get('/test')
def test() -> ResponseSchemaModel[GetApiDetail]:
res = CustomResponseCode.HTTP_200
return ResponseSchemaModel[GetApiDetail](code=res.code, msg=res.msg, data=GetApiDetail(...))
"""
data: SchemaT
class ResponseBase:
""""""
@staticmethod
def __response(
*, res: CustomResponseCode | CustomResponse = None, data: Any | None = None
) -> ResponseModel | ResponseSchemaModel:
""""
:param res:
:param data:
:return:
"""
return ResponseModel(code=res.code, msg=res.msg, data=data)
def success(
self,
*,
res: CustomResponseCode | CustomResponse = CustomResponseCode.HTTP_200,
data: Any | None = None,
) -> ResponseModel | ResponseSchemaModel:
"""
:param res:
:param data:
:return:
"""
return self.__response(res=res, data=data)
def fail(
self,
*,
res: CustomResponseCode | CustomResponse = CustomResponseCode.HTTP_400,
data: Any = None,
) -> ResponseModel | ResponseSchemaModel:
"""
:param res:
:param data:
:return:
"""
return self.__response(res=res, data=data)
@staticmethod
def fast_success(
*,
res: CustomResponseCode | CustomResponse = CustomResponseCode.HTTP_200,
data: Any | None = None,
) -> Response:
return MsgSpecJSONResponse({'code': res.code, 'msg': res.msg, 'data': data})
response_base: ResponseBase = ResponseBase()
|