1 from __future__ import print_function
3 from django.template import RequestContext
4 from django.shortcuts import render_to_response
6 from manifold.core.query import Query
7 from unfold.page import Page
8 from plugins.raw import Raw
9 from plugins.stack import Stack
10 from plugins.tabs import Tabs
11 from plugins.googlemap import GoogleMap
12 from plugins.senslabmap import SensLabMap
14 from unfold.loginrequired import FreeAccessView
15 from ui.topmenu import topmenu_items_live, the_user
17 from plugins.querytable import QueryTable
19 from myslice.configengine import ConfigEngine
20 from myslice.theme import ThemeView
22 # View for 1 platform and its details
23 class PlatformView(FreeAccessView, ThemeView):
24 template_name = "platform.html"
26 def get_context_data(self, **kwargs):
27 page = Page(self.request)
28 page.add_js_files ( [ "js/common.functions.js" ] )
30 for key, value in kwargs.iteritems():
31 print("%s = %s" % (key, value))
32 if key == "platformname":
35 network_query = Query().get('local:platform')\
36 .filter_by('platform', '==', platformname)\
37 .select('platform','platform_longname','gateway_type')
38 page.enqueue_query(network_query)
40 # ListResources of the platform
41 metadata = page.get_metadata()
42 resource_md = metadata.details_by_object('resource')
43 resource_fields = [column['name'] for column in resource_md['column']]
44 resources = platformname + ':resource'
45 query_resource_all = Query.get(resources).select(resource_fields)
46 page.enqueue_query(query_resource_all)
47 query_resource_default_fields = Query.get(resources).select('hrn','hostname', 'type','country')
48 page.enqueue_query(query_resource_default_fields)
50 page.expose_js_metadata()
51 networklist = QueryTable(
55 # this is the query at the core of the slice list
56 query = network_query,
57 query_all = network_query,
59 datatables_options = {
60 'iDisplayLength' : 25,
61 'bLengthChange' : True,
65 # networklist = SimpleList(
69 # query = network_query,
72 # --------------------------------------------------------------------------
74 # for internal use in the querytable plugin;
75 # needs to be a unique column present for each returned record
76 main_query_init_key = 'hrn'
78 # the resources part is made of a Tabs (Geographic, List),
79 resources_as_gmap = GoogleMap(
81 title = 'Geographic view',
82 domid = 'resources-map',
83 # tab's sons preferably turn this off
85 query = query_resource_default_fields,
86 query_all = query_resource_all,
87 # this key is the one issued by google
88 googlemap_api_key = ConfigEngine().googlemap_api_key(),
89 # the key to use at init-time
90 init_key = main_query_init_key,
97 resources_as_3dmap = SensLabMap(
100 domid = 'senslabmap',
101 query = query_resource_default_fields,
102 query_all = query_resource_all,
104 resources_as_list = QueryTable(
106 domid = 'resources-list',
108 # this is the query at the core of the slice list
109 query = query_resource_default_fields,
110 query_all = query_resource_all,
111 init_key = main_query_init_key,
113 datatables_options = {
114 'iDisplayLength': 25,
115 'bLengthChange' : True,
124 resources_area = Tabs ( page=page,
128 outline_complete=True,
129 sons= resources_sons,
130 active_domid = 'resources-map',
131 persistent_active=True,
134 context = super(PlatformView, self).get_context_data(**kwargs)
135 context['person'] = self.request.user
136 context['networks'] = networklist.render(self.request)
137 context['resources'] = resources_area.render(self.request)
139 # XXX This is repeated in all pages
140 # more general variables expected in the template
141 context['title'] = 'Platforms connected to MySlice'
142 # the menu items on the top
143 context['topmenu_items'] = topmenu_items_live('Platforms', page)
144 # so we can sho who is logged
145 context['username'] = the_user(self.request)
146 context['theme'] = self.theme
147 context.update(page.prelude_env())