logout_on_manifold_exception : a decorator for dealing with manifold exceptions insid...
[myslice.git] / myslice / viewutils.py
index 7fbdc77..3fa8ceb 100644 (file)
@@ -30,3 +30,29 @@ def the_user (request):
     else: 
         return request.user.email
 
+
+# a decorator for view classes to catch manifold exceptions
+# by design views should not directly exercise a manifold query
+# given that these are asynchroneous, you would expect a view to just 
+# return a mundane skeleton
+# however of course this is not always true, and if only for metadata 
+# that for some reason we deal with some other way, it is often a good idea
+# for a view to monitor these exceptions - and to take this opportunity to 
+# logout people if it's a matter of expired session for example
+def logout_on_manifold_exception (view_as_a_function):
+    def wrapped (request, *args, **kwds):
+        try:
+            return view_as_a_function(request,*args, **kwds)
+        except ManifoldException, manifold_result:
+            # xxx we need a means to display this message to user...
+            from django.contrib.auth import logout
+            logout(request)
+            return HttpResponseRedirect ('/')
+        except Exception, e:
+            # xxx we need to sugarcoat this error message in some error template...
+            print "Unexpected exception",e
+            import traceback
+            traceback.print_exc()
+            return HttpResponseRedirect ('/')
+    return wrapped
+