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