Updated ez_setup.py from 0.6a7 to 0.6a9
[fdr-django.git] / django / utils / decorators.py
blob1c6cc8c7de64cd28ecf0f96a0184ed16b3b56a65
1 "Functions that help with dynamically creating decorators for views."
3 def decorator_from_middleware(middleware_class):
4 """
5 Given a middleware class (not an instance), returns a view decorator. This
6 lets you use middleware functionality on a per-view basis.
7 """
8 def _decorator_from_middleware(view_func, *args, **kwargs):
9 middleware = middleware_class(*args, **kwargs)
10 def _wrapped_view(request, *args, **kwargs):
11 if hasattr(middleware, 'process_request'):
12 result = middleware.process_request(request)
13 if result is not None:
14 return result
15 if hasattr(middleware, 'process_view'):
16 result = middleware.process_view(request, view_func, *args, **kwargs)
17 if result is not None:
18 return result
19 try:
20 response = view_func(request, *args, **kwargs)
21 except Exception, e:
22 if hasattr(middleware, 'process_exception'):
23 result = middleware.process_exception(request, e)
24 if result is not None:
25 return result
26 raise
27 if hasattr(middleware, 'process_response'):
28 result = middleware.process_response(request, response)
29 if result is not None:
30 return result
31 return response
32 return _wrapped_view
33 return _decorator_from_middleware