from functools import wraps def RequestMiddleware(middleware_func): """ RequestMiddleware """ @wraps(middleware_func) def middleware(view_func): """ middleware """ @wraps(view_func) def new_view_func(request, *args, **kwargs ): """ new_view_func """ middleware_func(request, *args, **kwargs) return view_func(request, *args, **kwargs) return new_view_func return middleware def ResponseMiddleware(middleware_func): """ ResponseMiddleware """ @wraps(middleware_func) def middleware(view_func): """ middleware """ @wraps(view_func) def new_view_func(request, *args, **kwargs ): """ new_view_func """ response = view_func(request, *args, **kwargs) middleware_func(request, response, *args, **kwargs) return response return new_view_func return middleware def ExceptionMiddleware(middleware_func): """ ExceptionMiddleware """ @wraps(middleware_func) def middleware(view_func): """ middleware """ @wraps(view_func) def new_view_func(request, *args, **kwargs ): """ new_view_func """ try: response = view_func(request, *args, **kwargs) except Exception, e: response = middleware_func(request, e, *args, **kwargs) if response is None: raise return response return new_view_func return middleware