# a set of utilities to help make the global layout consistent across views
+from django.http import HttpResponseRedirect
+
+from manifold.manifoldresult import ManifoldException
+
def topmenu_items (current,request=None):
has_user=request.user.is_authenticated()
result=[]
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
+