def test_basic(self): """ Tests that 1 + 1 always equals 2. """ print 'test_basic is broken' return True sl = SimpleList (visible=True) print 'rendering', sl.render() self.assertEqual(1 + 1, 2)
def test_basic(self): """ Tests that 1 + 1 always equals 2. """ print('test_basic is broken') return True sl = SimpleList (visible=True) print('rendering', sl.render()) self.assertEqual(1 + 1, 2)
def __init__ (self, **settings): SimpleList.__init__(self, key='slice.slice_hrn', classname='slicelist', **settings)
def requirements (self): req = SimpleList.requirements(self) req['css_files'] += [ 'css/slicelist.css' ] return req
def __init__ (self, **settings): SimpleList.__init__(self, key='platform', classname='testbedlist', **settings)
def __init__(self, **settings): SimpleList.__init__(self, key='platform', classname='testbedlist', **settings)
def get(self, request, slicename): if request.GET.get('message'): msg = "Slice successfully updated" else: msg = None page = Page(request) metadata = page.get_metadata() page.expose_js_metadata() resource_md = metadata.details_by_object('resource') resource_fields = [column['name'] for column in resource_md['column']] user_md = metadata.details_by_object('user') user_fields = ['user_hrn' ] # [column['name'] for column in user_md['column']] query_resource_all = Query.get('resource').select(resource_fields) #page.enqueue_query(query_resource_all) # leases query #lease_md = metadata.details_by_object('lease') #lease_fields = [column['name'] for column in lease_md['column']] #query_lease_all = Query.get('lease').select(lease_fields) #page.enqueue_query(query_lease_all) slice_md = metadata.details_by_object('slice') slice_fields = [column['name'] for column in slice_md['column']] logger.debug("SLICE RES VIEW fields = {}".format(slice_fields)) # TODO The query to run is embedded in the URL # Example: select slice_hrn, resource.urn, lease.resource, lease.start_time, lease.end_time from slice where slice_hrn == "ple.upmc.myslicedemo" main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename) main_query.select(slice_fields) # Columns shown by default in Query_table plugin page.expose_js_var( "QUERYTABLE_MAP", "{'Resource name': 'hostname', 'Type': 'type', 'Facility': 'facility_name','Testbed': 'testbed_name', 'Available':'available'}" ) # Columns checked by default in Columns_selector plugin query_default_fields = [ 'hostname', 'type', 'facility_name', 'testbed_name', 'available' ] QUERYTABLE_MAP = { 'hostname': 'Resource name', 'type': 'Type', 'facility_name': 'Facility', 'testbed_name': 'Testbed', 'available': 'Available', } # # SLICE # 'slice_hrn', # # - The record key is needed otherwise the storage of records # # bugs ! # 'slice_urn', # # RESOURCES # 'resource', # 'lease', # 'resource.urn', # 'resource.hostname', 'resource.type', # # - The facility_name and testbed_name are required for the # # testbeds plugin to properly work. # 'resource.facility_name', # 'resource.testbed_name', # # LEASES # 'lease.resource', # 'lease.start_time', # 'lease.end_time', # # - The lease_id is important for NITOS identify already existing # # leases # 'lease.lease_id', # # FLOWSPACE # #'flowspace', # # VMS # #'vms', # #'user.user_hrn', # #'application.measurement_point.counter' #) # for internal use in the querytable plugin; # needs to be a unique column present for each returned record main_query_init_key = 'urn' aq = AnalyzedQuery(main_query, metadata=metadata) page.enqueue_query(main_query, analyzed_query=aq) sq_resource = aq.subquery('resource') sq_lease = aq.subquery('lease') #sq_flowspace = aq.subquery('flowspace') #sq_vms = aq.subquery('vms') # -------------------------------------------------------------------------- # ALL RESOURCES LIST # resources as a list using datatable plugin list_resources = QueryTable( page=page, domid='resources-list', title='List view', query=sq_resource, query_all=query_resource_all, mapping=QUERYTABLE_MAP, default_fields=query_default_fields, init_key="urn", checkboxes=True, datatables_options={ 'iDisplayLength': 25, 'bLengthChange': True, 'bAutoWidth': True, }, ) # -------------------------------------------------------------------------- # RESERVED RESOURCES LIST # resources as a list using datatable plugin list_reserved_resources = SimpleList( title=None, page=page, key='urn', query=sq_resource, ) list_reserved_leases = SimpleList( title=None, page=page, key='resource', query=sq_lease, ) # list_reserved_resources = QueryTable( # page = page, # domid = 'resources-reserved-list', # title = 'List view', # query = sq_resource, # query_all = sq_resource, # init_key = "urn", # checkboxes = True, # datatables_options = { # 'iDisplayLength': 25, # 'bLengthChange' : True, # 'bAutoWidth' : True, # }, # ) # -------------------------------------------------------------------------- # COLUMNS EDITOR # list of fields to be applied on the query # this will add/remove columns in QueryTable plugin filter_column_editor = ColumnsEditor( page=page, query=sq_resource, query_all=query_resource_all, default_fields=query_default_fields, title="Select Columns", domid='select-columns', ) # -------------------------------------------------------------------------- # RESOURCES MAP # the resources part is made of a Tabs (Geographic, List), map_resources = GoogleMap( page=page, title='Geographic view', domid='resources-map', # tab's sons preferably turn this off togglable=False, query=sq_resource, # this key is the one issued by google googlemap_api_key=ConfigEngine().googlemap_api_key(), # the key to use at init-time init_key=main_query_init_key, checkboxes=True, # To center around Europe : 53,9 / 3 latitude=53., longitude=9., zoom=3, ) # -------------------------------------------------------------------------- # LEASES Nitos Scheduler # Display the leases reservation timeslots of the resources resources_as_scheduler2 = Scheduler2( page=page, domid='scheduler', title='Scheduler', # this is the query at the core of the slice list query=sq_resource, query_lease=sq_lease, ) # -------------------------------------------------------------------------- # LEASES Asap Scheduler # Select an end_time for all unconfigured resources # start_time is as soon as possible #resources_as_asap = AsapPlugin( # page = page, # domid = 'asap', # title = 'Asap', # # this is the query at the core of the slice list # query = sq_resource, # query_lease = sq_lease, #) # -------------------------------------------------------------------------- # QueryUpdater (Pending Operations) # pending_resources = QueryUpdaterPlugin( # page = page, # title = 'Pending operations', # query = main_query, # togglable = False, # # start turned off, it will open up itself when stuff comes in # toggled = False, # domid = 'pending', # outline_complete = True, # username = request.user, # ) # -------------------------------------------------------------------------- # NETWORKS # testbeds as a list of filters network_md = metadata.details_by_object('network') network_fields = [column['name'] for column in network_md['column']] #query_networks = Query.get('network').select(network_fields) #page.enqueue_query(query_networks) filter_testbeds = TestbedsPlugin( page=page, domid='testbeds-filter', title='Filter by testbeds', query=sq_resource, #query_networks = query_networks, #init_key = "network_hrn", #checkboxes = True, #datatables_options = { # 'iDisplayLength': 25, # 'bLengthChange' : True, # 'bAutoWidth' : True, # }, ) filter_status = FilterStatusPlugin( page=page, domid="filter-status", query=sq_resource, query_lease=sq_lease, ) apply = ApplyPlugin( page=page, domid="apply", query=main_query, username=request.user, ) # -------------------------------------------------------------------------- # Ofelia OpenFlow Plugin # Bristol plugin # plugin which display a "gathering resources" message # waiting for all resources to be returned by manifold # univbriswelcome = Univbris( # page = page, # title = 'univbris_welcome', # domid = 'univbris_welcome', # query = query_resource_all, # ) # univbrisfoamlist = UnivbrisFoam( # page = page, # title = 'univbris_foam_ports_selection', # domid = 'univbris_foam_ports_selection', # query = query_resource_all, # query_all = query_resource_all, # checkboxes = False, # datatables_options = { # 'iDisplayLength': 10, # 'bLengthChange' : True, # 'bAutoWidth' : True, # }, # ) # #plugin which manages the different flowspaces that the user creates, and also sends flowspaces to manifold # univbrisfvlist = UnivbrisFv( # page = page, # title = 'univbris_flowspace_selection', # domid = 'univbris_flowspace_selection', # query = sq_flowspace, # query_all = query_resource_all, # datatables_options = { # 'iDisplayLength': 5, # 'bLengthChange' : True, # 'bAutoWidth' : True, # }, # ) # #plugin which allows the definition of a single flowspace # univbrisfvform = UnivbrisFvf( # page = page, # title = 'univbris_flowspace_form', # domid = 'univbris_flowspace_form', # query = query_resource_all, # query_all = None, # datatables_options = { # 'iDisplayLength': 3, # 'bLengthChange' : True, # 'bAutoWidth' : True, # }, # ) # #plugin which allows the definition the match criteria on a single OPTICAL flowspace # univbrisofvform = UnivbrisFvfo( # page = page, # title = 'univbris_oflowspace_form', # domid = 'univbris_oflowspace_form', # query = None, # query_all = None, # datatables_options = { # 'iDisplayLength': 3, # 'bLengthChange' : True, # 'bAutoWidth' : True, # }, # ) # #plugin which display the gathered topology # univbristopology = UnivbrisTopo( # page = page, # title = 'univbris_topology', # domid = 'univbris_topology', # query = query_resource_all, # ) # # -------------------------------------------------------------------------- # # Ofelia VTAM Plugin # # Bristol Plugin # #plugin which display a table where an experimenter will add VMs to according to his needs # # responsible to send the data to Manifold # univbrisvtamplugin = UnivbrisVtamPlugin( # page = page, # title = 'univbris_vtam', # domid = 'univbris_vtam', # query = sq_vms, # #query = sq_resource, # ) # #plugin which display a form where an experimenter will specify # # in which testbed and which physical server to setup the VM # univbrisvtamform = UnivbrisVtamForm( # page = page, # title = 'univbris_vtam_form', # domid = 'univbris_vtam_form', # query = query_resource_all, # query_all = None, # datatables_options = { # 'iDisplayLength': 3, # 'bLengthChange' : True, # 'bAutoWidth' : True, # }, # ) # -------------------------------------------------------------------------- # SLA View and accept dialog sla_dialog = SlaDialog( page=page, title='sla dialog', query=main_query, #togglable = False, # start turned off, it will open up itself when stuff comes in #toggled = True, domid='sla_dialog', #outline_complete = True, username=request.user, ) template_env = {} template_env['request'] = self.request template_env['list_resources'] = list_resources.render(self.request) template_env[ 'list_reserved_resources'] = list_reserved_resources.render( self.request) template_env['list_reserved_leases'] = list_reserved_leases.render( self.request) template_env['columns_editor'] = filter_column_editor.render( self.request) template_env['filter_testbeds'] = filter_testbeds.render(self.request) template_env['filter_status'] = filter_status.render(self.request) template_env['apply'] = apply.render(self.request) template_env['map_resources'] = map_resources.render(self.request) template_env['scheduler'] = resources_as_scheduler2.render( self.request) #template_env['asap'] = resources_as_asap.render(self.request) # Bristol plugin # template_env['welcome'] = univbriswelcome.render(self.request) # template_env['resources'] = univbrisfoamlist.render(self.request) # template_env['flowspaces'] = univbrisfvlist.render(self.request) # template_env['oflowspaces_form'] = univbrisofvform.render(self.request) # template_env['flowspaces_form'] = univbrisfvform.render(self.request) # template_env['topology'] = univbristopology.render(self.request) # template_env['vms_list'] = univbrisvtamplugin.render(self.request) # template_env['vm_form'] = univbrisvtamform.render(self.request) # template_env['pending_resources'] = pending_resources.render(self.request) template_env['sla_dialog'] = sla_dialog.render(self.request) template_env["theme"] = self.theme template_env["username"] = request.user template_env["slice"] = slicename template_env["section"] = "resources" template_env["msg"] = msg template_env.update(page.prelude_env()) return render_to_response(self.template, template_env, context_instance=RequestContext(request))