diff options
Diffstat (limited to 'google_appengine/lib/django/django/utils/decorators.py')
-rwxr-xr-x | google_appengine/lib/django/django/utils/decorators.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/google_appengine/lib/django/django/utils/decorators.py b/google_appengine/lib/django/django/utils/decorators.py new file mode 100755 index 0000000..1c6cc8c --- /dev/null +++ b/google_appengine/lib/django/django/utils/decorators.py @@ -0,0 +1,33 @@ +"Functions that help with dynamically creating decorators for views." + +def decorator_from_middleware(middleware_class): + """ + Given a middleware class (not an instance), returns a view decorator. This + lets you use middleware functionality on a per-view basis. + """ + def _decorator_from_middleware(view_func, *args, **kwargs): + middleware = middleware_class(*args, **kwargs) + def _wrapped_view(request, *args, **kwargs): + if hasattr(middleware, 'process_request'): + result = middleware.process_request(request) + if result is not None: + return result + if hasattr(middleware, 'process_view'): + result = middleware.process_view(request, view_func, *args, **kwargs) + if result is not None: + return result + try: + response = view_func(request, *args, **kwargs) + except Exception, e: + if hasattr(middleware, 'process_exception'): + result = middleware.process_exception(request, e) + if result is not None: + return result + raise + if hasattr(middleware, 'process_response'): + result = middleware.process_response(request, response) + if result is not None: + return result + return response + return _wrapped_view + return _decorator_from_middleware |