# Create your views here. from django.template import RequestContext from django.shortcuts import render_to_response from django.contrib.auth.decorators import login_required from django.http import HttpResponseRedirect from unfold.page import Page #from manifold.manifoldquery import ManifoldQuery from manifold.core.query import Query, AnalyzedQuery from plugins.raw.raw import Raw from plugins.stack.stack import Stack from plugins.tabs.tabs import Tabs from plugins.lists.slicelist import SliceList from plugins.hazelnut.hazelnut import Hazelnut from plugins.googlemap.googlemap import GoogleMap from plugins.senslabmap.senslabmap import SensLabMap from plugins.querycode.querycode import QueryCode from plugins.quickfilter.quickfilter import QuickFilter from plugins.messages.messages import Messages from manifold.manifoldresult import ManifoldException from myslice.viewutils import quickfilter_criterias from myslice.viewutils import topmenu_items, the_user # XXX JORDAN from manifold.metadata import MetaData as Metadata tmp_default_slice='ple.inria.heartbeat' debug = True @login_required def slice_view (request, slicename=tmp_default_slice): # xxx Thierry - ugly hack # fetching metadata here might fail - e.g. with an expired session.. # let's catch this early on and log out our user if needed # it should of course be handled in a more generic way try: return _slice_view(request,slicename) except ManifoldException, manifold_result: # xxx needs 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 # return ... def _slice_view (request, slicename): page = Page(request) page.expose_js_metadata() # TODO The query to run is embedded in the URL main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename) # Get default fields from metadata unless specified if not main_query.fields: metadata = page.get_metadata() md_fields = metadata.details_by_object('slice') if debug: print "METADATA", md_fields # TODO Get default fields main_query.fields = [ 'slice_hrn', 'resource.hrn', 'resource.hostname', 'resource.type', 'resource.authority', 'user.user_hrn', # 'application.measurement_point.counter' ] aq = AnalyzedQuery(main_query) page.enqueue_query(main_query, analyzed_query=aq) # Prepare the display according to all metadata # (some parts will be pending, others can be triggered by users). # # For example slice measurements will not be requested by default... # Create the base layout (Stack)... main_plugin = Stack ( page=page, title="Slice view for %s"%slicename, domid='thestack', togglable=False, sons=[], ) # ... responsible for the slice properties... main_plugin.insert ( Raw (page=page,togglable=False, toggled=True,html="
#old#Thierry: I am commeting off the use of which, #old# although rudimentarily ported to the django framework, #old#causes a weird behaviour especially wrt scrolling. #old#On my Mac any longer #old#if I keep this active, so for now it's disabled #old#
""", #old# ), #old# ]), #old# Hazelnut ( #old# page=page, #old# title='a hazelnut not in tabs', #old# domid='standalone', #old# # this is the query at the core of the slice list #old# query=main_query, #old# columns=['hrn','hostname'], #old# ), #old# # you don't *have to* set a domid, but if you plan on using toggled=persistent then it's required #old# # because domid is the key for storing toggle status in the browser #old# QueryCode ( #old# page=page, #old# title='xmlrpc code (toggled=False)', #old# query=main_query, #old## domid='xmlrpc', #old# toggled=False, #old# ), #old# QuickFilter ( #old# page=page, #old# title="QuickFilter - requires metadata (toggled=False)", #old# criterias=quickfilter_criterias, #old# domid='filters', #old# toggled=False, #old# ), #old# Messages ( #old# page=page, #old# title="Runtime messages (again)", #old# domid="msgs-post", #old# ) #old# ]) # variables that will get passed to the view-unfold1.html template template_env = {} # define 'unfold1_main' to the template engine - the main contents template_env [ 'unfold1_main' ] = main_plugin.render(request) # more general variables expected in the template template_env [ 'title' ] = 'Test view that combines various plugins' # the menu items on the top template_env [ 'topmenu_items' ] = topmenu_items('slice', request) # so we can sho who is logged template_env [ 'username' ] = the_user (request) # don't forget to run the requests page.expose_queries () # xxx create another plugin with the same query and a different layout (with_datatables) # show that it worls as expected, one single api call to backend and 2 refreshed views # the prelude object in page contains a summary of the requirements() for all plugins # define {js,css}_{files,chunks} prelude_env = page.prelude_env() template_env.update(prelude_env) result=render_to_response ('view-unfold1.html',template_env, context_instance=RequestContext(request)) return result