deactivated hide/show validation link in topmenu.py
[myslice.git] / portal / sliceview.py
index 4d23bbb..032b648 100644 (file)
@@ -1,3 +1,4 @@
+import json
 from django.template                 import RequestContext
 from django.shortcuts                import render_to_response
 
 from django.template                 import RequestContext
 from django.shortcuts                import render_to_response
 
@@ -5,6 +6,7 @@ from unfold.loginrequired            import LoginRequiredAutoLogoutView
 
 from unfold.page                     import Page
 from manifold.core.query             import Query, AnalyzedQuery
 
 from unfold.page                     import Page
 from manifold.core.query             import Query, AnalyzedQuery
+from manifold.manifoldapi            import execute_query
 
 from ui.topmenu                      import topmenu_items, the_user
 
 
 from ui.topmenu                      import topmenu_items, the_user
 
@@ -12,12 +14,16 @@ from plugins.raw                     import Raw
 from plugins.stack                   import Stack
 from plugins.tabs                    import Tabs
 from plugins.querytable              import QueryTable 
 from plugins.stack                   import Stack
 from plugins.tabs                    import Tabs
 from plugins.querytable              import QueryTable 
+from plugins.querygrid               import QueryGrid
 from plugins.queryupdater            import QueryUpdater
 from plugins.googlemap               import GoogleMap
 from plugins.senslabmap              import SensLabMap
 from plugins.scheduler               import Scheduler
 from plugins.querycode               import QueryCode
 from plugins.queryupdater            import QueryUpdater
 from plugins.googlemap               import GoogleMap
 from plugins.senslabmap              import SensLabMap
 from plugins.scheduler               import Scheduler
 from plugins.querycode               import QueryCode
-from plugins.query_editor            import QueryEditor
+# Thierry
+# stay away from query editor for now as it seems to make things go very slow
+# see https://lists.myslice.info/pipermail/devel-myslice/2013-December/000221.html 
+#from plugins.query_editor            import QueryEditor
 from plugins.active_filters          import ActiveFilters
 from plugins.quickfilter             import QuickFilter
 from plugins.messages                import Messages
 from plugins.active_filters          import ActiveFilters
 from plugins.quickfilter             import QuickFilter
 from plugins.messages                import Messages
@@ -28,12 +34,15 @@ from myslice.config                  import Config
 tmp_default_slice='ple.upmc.myslicedemo'
 
 # temporary : turn off the users part to speed things up
 tmp_default_slice='ple.upmc.myslicedemo'
 
 # temporary : turn off the users part to speed things up
-#do_query_users=True
-do_query_users=False
+do_query_users=True
+#do_query_users=False
 
 #do_query_leases=True
 do_query_leases=False
 
 
 #do_query_leases=True
 do_query_leases=False
 
+insert_grid=False
+#insert_grid=True
+
 insert_messages=False
 #insert_messages=True
 
 insert_messages=False
 #insert_messages=True
 
@@ -73,14 +82,37 @@ class SliceView (LoginRequiredAutoLogoutView):
         #main_query_key = 'hrn'
     
         query_resource_all = Query.get('resource').select(resource_fields)
         #main_query_key = 'hrn'
     
         query_resource_all = Query.get('resource').select(resource_fields)
-        if do_query_users:
-            query_user_all = Query.get('user').select(user_fields)
-    
+
         aq = AnalyzedQuery(main_query, metadata=metadata)
         page.enqueue_query(main_query, analyzed_query=aq)
         page.enqueue_query(query_resource_all)
         if do_query_users:
         aq = AnalyzedQuery(main_query, metadata=metadata)
         page.enqueue_query(main_query, analyzed_query=aq)
         page.enqueue_query(query_resource_all)
         if do_query_users:
-            page.enqueue_query(query_user_all)
+            # Required: the user must have an authority in its user.config
+            # XXX Temporary solution
+            user_query  = Query().get('local:user').select('config','email')
+            user_details = execute_query(self.request, user_query)
+            
+            # not always found in user_details...
+            config={}
+            for user_detail in user_details:
+                #email = user_detail['email']
+                if user_detail['config']:
+                    config = json.loads(user_detail['config'])
+            user_detail['authority'] = config.get('authority',"Unknown Authority")
+
+            if user_detail['authority'] is not None:
+                sub_authority = user_detail['authority'].split('.')
+                root_authority = sub_authority[0]
+                query_user_all = Query.get(root_authority+':user').select(user_fields)
+
+                # XXX TODO this filter doesn't work - to be improved in Manifold
+                #.filter_by('authority.authority_hrn', '=', user_detail['authority'])
+
+                page.enqueue_query(query_user_all)
+            else:
+                print "authority of the user is not in local:user db"
+                query_user_all = Query.get('user').select(user_fields)
+            #    query_user_all = None
     
         # ... and for the relations
         # XXX Let's hardcode resources for now
     
         # ... and for the relations
         # XXX Let's hardcode resources for now
@@ -129,13 +161,14 @@ class SliceView (LoginRequiredAutoLogoutView):
         # --------------------------------------------------------------------------
         # Filter Resources
        
         # --------------------------------------------------------------------------
         # Filter Resources
        
-        filter_query_editor = QueryEditor(
-            page  = page,
-            query = sq_resource, 
-            query_all = query_resource_all,
-            title = "Select Columns",
-            domid = 'select-columns',
-            )
+# turn off for now -- see above
+#        filter_query_editor = QueryEditor(
+#            page  = page,
+#            query = sq_resource, 
+#            query_all = query_resource_all,
+#            title = "Select Columns",
+#            domid = 'select-columns',
+#            )
         filter_active_filters = ActiveFilters(
             page  = page,
             query = sq_resource,
         filter_active_filters = ActiveFilters(
             page  = page,
             query = sq_resource,
@@ -145,7 +178,8 @@ class SliceView (LoginRequiredAutoLogoutView):
             page                = page,
             title               = 'Filter Resources',
             domid               = 'filters',
             page                = page,
             title               = 'Filter Resources',
             domid               = 'filters',
-            sons                = [filter_query_editor, filter_active_filters],
+            sons                = [# filter_query_editor, 
+                                   filter_active_filters],
             togglable           = True,
             toggled             = 'persistent',
             outline_complete    = True, 
             togglable           = True,
             toggled             = 'persistent',
             outline_complete    = True, 
@@ -197,6 +231,19 @@ class SliceView (LoginRequiredAutoLogoutView):
                 },
             )
 
                 },
             )
 
+        if insert_grid:
+            resources_as_grid = QueryGrid( 
+                page       = page,
+                domid      = 'resources-grid',
+                title      = 'Grid view',
+                # this is the query at the core of the slice list
+                query      = sq_resource,
+                query_all  = query_resource_all,
+                # safer to use 'hrn' as the internal unique key for this plugin
+                id_key     = main_query_key,
+                checkboxes = True,
+                )
+
         if do_query_leases:
             resources_as_scheduler = Scheduler(
                 page        = page,
         if do_query_leases:
             resources_as_scheduler = Scheduler(
                 page        = page,
@@ -220,6 +267,10 @@ class SliceView (LoginRequiredAutoLogoutView):
             resources_as_3dmap,
             resources_as_list_area,
             ]
             resources_as_3dmap,
             resources_as_list_area,
             ]
+        if insert_grid:
+            resources_sons.append(resources_as_grid)
+
+        print 40*'+-',"resources_sons has",len(resources_sons),"son"
 
         resources_area = Tabs ( page=page, 
                                 domid="resources",
 
         resources_area = Tabs ( page=page, 
                                 domid="resources",
@@ -235,7 +286,7 @@ class SliceView (LoginRequiredAutoLogoutView):
         # --------------------------------------------------------------------------
         # USERS
     
         # --------------------------------------------------------------------------
         # USERS
     
-        if do_query_users:
+        if do_query_users and query_user_all is not None:
             tab_users = Tabs(
                 page                = page,
                 domid               = 'users',
             tab_users = Tabs(
                 page                = page,
                 domid               = 'users',