fixed naming for facility_name and testbed_name in QueryTable plugin
[myslice.git] / portal / sliceresourceview.py
index 40c49f1..3fe521a 100644 (file)
@@ -1,8 +1,9 @@
 from django.template                    import RequestContext
 from django.shortcuts                   import render_to_response
 
-from manifold.core.query                import Query, AnalyzedQuery
-from manifoldapi.manifoldapi            import execute_query
+from manifold.core.query             import Query, AnalyzedQuery
+from manifoldapi.manifoldapi         import execute_query
+import json
 
 from django.views.generic.base          import TemplateView
 
@@ -17,7 +18,7 @@ from myslice.configengine               import ConfigEngine
 from plugins.apply                      import ApplyPlugin
 from plugins.querytable                 import QueryTable
 from plugins.googlemap                  import GoogleMap
-#from plugins.queryupdater               import QueryUpdater
+# from plugins.queryupdater               import QueryUpdaterPlugin
 from plugins.filter_status              import FilterStatusPlugin
 from plugins.testbeds                   import TestbedsPlugin
 from plugins.scheduler2                 import Scheduler2
@@ -51,14 +52,26 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         # 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_urn', # XXX We need the key otherwise the storage of records bugs !
+                # SLICE
                 'slice_hrn',
+                # - The record key is needed otherwise the storage of records
+                #   bugs !
+                'slice_urn',
+                # RESOURCES
                 'resource.urn',
                 'resource.hostname', 'resource.type',
-                'resource.network_hrn',
+                # - 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', 
+
                 #'user.user_hrn',
                 #'application.measurement_point.counter'
         )
@@ -74,11 +87,11 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         #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']]
+        #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)
+        #query_lease_all = Query.get('lease').select(lease_fields)
+        #page.enqueue_query(query_lease_all)
 
         # --------------------------------------------------------------------------
         # ALL RESOURCES LIST
@@ -157,16 +170,16 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             # tab's sons preferably turn this off
             togglable  = False,
             query      = sq_resource,
-            query_all  = query_resource_all,
             # 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,
-            # center on Paris
-            latitude   = 49.,
-            longitude  = 9,
-            zoom       = 8,
+            
+            # To center around Europe : 53,9 / 3
+            latitude   = 53.,
+            longitude  = 9.,
+            zoom       = 3,
         )
 
         # --------------------------------------------------------------------------
@@ -185,17 +198,17 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         # --------------------------------------------------------------------------
         # QueryUpdater (Pending Operations)
  
-#DEPRECATED|        pending_resources = QueryUpdater(
-#DEPRECATED|            page                = page,
-#DEPRECATED|            title               = 'Pending operations',
-#DEPRECATED|            query               = main_query,
-#DEPRECATED|            togglable           = False,
-#DEPRECATED|            # start turned off, it will open up itself when stuff comes in
-#DEPRECATED|            toggled             = False,
-#DEPRECATED|            domid               = 'pending',
-#DEPRECATED|            outline_complete    = True,
-#DEPRECATED|            username            = request.user,
-#DEPRECATED|        )
+#         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
@@ -204,22 +217,22 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         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)
+        #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,
-                },
+            #query_networks  = query_networks,
+            #init_key        = "network_hrn",
+            #checkboxes      = True,
+            #datatables_options = {
+            #    'iDisplayLength': 25,
+            #    'bLengthChange' : True,
+            #    'bAutoWidth'    : True,
+            #    },
         )
 
         filter_status = FilterStatusPlugin(
@@ -230,7 +243,8 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         apply = ApplyPlugin(
             page            = page,
             domid           = "apply",
-            query           = sq_resource,
+            query           = main_query,
+            username            = request.user,
         )
             
 
@@ -248,7 +262,27 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             outline_complete    = True,
             username            = request.user,
         )
-
+        
+        ## check user is pi or not
+        platform_query  = Query().get('local:platform').select('platform_id','platform','gateway_type','disabled')
+        account_query  = Query().get('local:account').select('user_id','platform_id','auth_type','config')
+        platform_details = execute_query(self.request, platform_query)
+        account_details = execute_query(self.request, account_query)
+
+        # XXX When session has expired, this is None and thus not iterable
+        for platform_detail in platform_details:
+            for account_detail in account_details:
+                if platform_detail['platform_id'] == account_detail['platform_id']:
+                    if 'config' in account_detail and account_detail['config'] is not '':
+                        account_config = json.loads(account_detail['config'])
+                        if 'myslice' in platform_detail['platform']:
+                            acc_auth_cred = account_config.get('delegated_authority_credentials','N/A')
+        # assigning values
+        if acc_auth_cred == {} or acc_auth_cred == 'N/A':
+            pi = "is_not_pi"
+        else:
+            pi = "is_pi"
+        
         template_env = {}
         template_env['list_resources'] = list_resources.render(self.request)
         template_env['list_reserved_resources'] = list_reserved_resources.render(self.request)
@@ -266,6 +300,7 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         template_env['sla_dialog'] = '' # sla_dialog.render(self.request)
         template_env["theme"] = self.theme
         template_env["username"] = request.user
+        template_env["pi"] = pi
         template_env["slice"] = slicename
         template_env["section"] = "resources"
         template_env["msg"] = msg