import dataclasses from flask import Response, jsonify class CustomResponse(Response): @classmethod def encode_dataclass(cls, response): from utils.handlers import to_schema return to_schema(response.__class__).jsonify(response) @classmethod def encode_list(cls, response): if len(response) == 0: return jsonify(response) else: first_item = response[0] if dataclasses.is_dataclass(first_item): from utils.handlers import to_schema schema = to_schema(first_item.__class__, many=True) return schema.jsonify(response, many=True) else: return response @classmethod def force_type(cls, response, environ=None): if dataclasses.is_dataclass(response): response = CustomResponse.encode_dataclass(response) if isinstance(response, list): response = CustomResponse.encode_list(response) return super(CustomResponse, cls).force_type(response, environ) def swagger_force_type(value): if isinstance(value, dict) or isinstance(value, list): return jsonify(value) return value