In [9]:
from flask import Flask, json, Response, request
#from werkzeuk.utils import find_modules, import_str

In [24]:
class ApiResult(object):
    def __init__(self, value, status=200):
        self.value = value
        self.status = status
        
    def to_response(self):
        return Response(json.dumps(self.value), status=self.status, mimetype='application/json')

In [ ]:
class ApiException(BaseException):
    def __init__(self, message, status=400):
        self.message = message
        self.status = status
    
    def to_response(self):
        return ApiResult({'message':self.message}, status=self.status)
    
    def to_result(self):
        return self.to_response()

In [10]:
class ApiFlask(Flask):
    def make_response(self, rv):
        if isinstance(rv, ApiResult):
            return rv.to_response()
        return Flask.make_response(self, rv)
    def register_error_handlers(app):
        app.register_error_handler(ApiException, lambda err: err.to_result())

In [13]:
def create_app(config=None):
    app = ApiFlask(__name__)
    app.config.update(config or {})
    #register_error_handlers(app)
    #register_blueprints(app)
    return app

In [ ]: