summaryrefslogtreecommitdiffstats
path: root/google_appengine/lib/django/django/utils/decorators.py
diff options
context:
space:
mode:
Diffstat (limited to 'google_appengine/lib/django/django/utils/decorators.py')
-rwxr-xr-xgoogle_appengine/lib/django/django/utils/decorators.py33
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