adding some tracability into the plugins code
[unfold.git] / sample / querygridview.py
1 # just one instance of QueryGrid, nothing more, nothing less
2 from django.views.generic.base import TemplateView
3 from django.template import RequestContext
4 from django.shortcuts import render_to_response
5
6 from manifold.core.query import Query, AnalyzedQuery
7
8 from unfold.page import Page
9
10 from ui.topmenu import topmenu_items_live, the_user
11
12 from plugins.querygrid import QueryGrid
13
14 class QueryGridView (TemplateView):
15
16     def get (self, request, slicename='ple.inria.f14'):
17
18         page=Page(request)
19         page.expose_js_metadata()
20         metadata = page.get_metadata()
21         resource_md = metadata.details_by_object('resource')
22         resource_fields = [column['name'] for column in resource_md['column']]
23
24         main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename)
25         main_query.select(
26                 'slice_hrn',
27                 #'resource.hrn', 
28                 'resource.hostname', 'resource.type', 
29                 'resource.network_hrn',
30                 'lease.urn',
31                 'user.user_hrn',
32                 #'application.measurement_point.counter'
33         )
34         # for internal use in the querygrid plugin;
35         # needs to be a unique column present for each returned record
36         main_query_init_key = 'hostname'
37     
38         query_resource_all = Query.get('resource').select(resource_fields)
39         
40         aq = AnalyzedQuery(main_query, metadata=metadata)
41         page.enqueue_query(main_query, analyzed_query=aq)
42         page.enqueue_query(query_resource_all)
43
44         sq_resource    = aq.subquery('resource')
45
46         resources_as_list = QueryGrid( 
47             page       = page,
48             domid      = 'resources-list',
49             title      = 'List view',
50             # this is the query at the core of the slice list
51             query      = sq_resource,
52             query_all  = query_resource_all,
53             # safer to use 'hrn' as the internal unique key for this plugin
54             init_key   = main_query_init_key,
55             checkboxes = True,
56             datatables_options = { 
57                 'iDisplayLength': 25,
58                 'bLengthChange' : True,
59                 'bAutoWidth'    : True,
60                 },
61             )
62
63         # variables that will get passed to the view-unfold1.html template
64         template_env = {}
65         
66         # define 'unfold_main' to the template engine - the main contents
67         template_env [ 'unfold_main' ] = resources_as_list.render(request)
68     
69         # more general variables expected in the template
70         template_env [ 'title' ] = 'simple %(slicename)s'%locals()
71         # the menu items on the top
72         template_env [ 'topmenu_items' ] = topmenu_items_live('Slice', page) 
73         # so we can sho who is logged
74         template_env [ 'username' ] = the_user (request) 
75     
76         # the prelude object in page contains a summary of the requirements() for all plugins
77         # define {js,css}_{files,chunks}
78         prelude_env = page.prelude_env()
79         template_env.update(prelude_env)
80         result=render_to_response ('view-unfold1.html',template_env,
81                                    context_instance=RequestContext(request))
82         return result