keep only import topmenu_items, the_user in myslice/viewutils
[myslice.git] / trash / sliceview.py
index d462e3e..534ed78 100644 (file)
@@ -9,22 +9,26 @@ from unfold.page                     import Page
 from manifold.core.query             import Query, AnalyzedQuery
 from manifold.manifoldresult         import ManifoldException
 from manifold.metadata               import MetaData as Metadata
-from myslice.viewutils               import quickfilter_criterias, topmenu_items, the_user
+# need to remove this dep.
+from trash.trashutils                import quickfilter_criterias
+from myslice.viewutils               import topmenu_items, the_user
 
 from plugins.raw.raw                 import Raw
 from plugins.stack.stack             import Stack
 from plugins.tabs.tabs               import Tabs
 from plugins.lists.slicelist         import SliceList
-from plugins.hazelnut.hazelnut       import Hazelnut 
+from plugins.hazelnut                import Hazelnut 
 from plugins.resources_selected      import ResourcesSelected
-from plugins.googlemap.googlemap     import GoogleMap 
+from plugins.googlemaps              import GoogleMaps
 from plugins.senslabmap.senslabmap   import SensLabMap
 from plugins.querycode.querycode     import QueryCode
+from plugins.query_editor            import QueryEditor
+from plugins.active_filters          import ActiveFilters
 from plugins.quickfilter.quickfilter import QuickFilter
 from plugins.messages.messages       import Messages
-from plugins.updater.updater         import Updater
+#from plugins.updater                 import Updater
 
-tmp_default_slice='ple.inria.heartbeat'
+tmp_default_slice='ple.upmc.myslicedemo'
 debug = True
 
 @login_required
@@ -52,28 +56,30 @@ def _slice_view (request, slicename):
     page = Page(request)
     page.expose_js_metadata()
 
+    metadata = page.get_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']]
+
     # TODO The query to run is embedded in the URL
     main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename)
-    query_resource_all = Query.get('resource').select('resource_hrn', 'hostname', 'type', 'authority')
-
-    # Get default fields from metadata unless specified
-    if not main_query.fields:
-        metadata = page.get_metadata()
-        md_fields = metadata.details_by_object('slice')
-        if debug:
-            print "METADATA", md_fields
-        # TODO Get default fields
-        main_query.select(
-                'slice_hrn',
-                'resource.resource_hrn', 'resource.hostname', 'resource.type', 'resource.authority',
-                'lease.urn',
-                'user.user_hrn',
-#                'application.measurement_point.counter'
-        )
+    main_query.select(
+            'slice_hrn',
+            'resource.resource_hrn', 'resource.hostname', 'resource.type', 'resource.network_hrn',
+            #'lease.urn',
+            'user.user_hrn',
+            #'application.measurement_point.counter'
+    )
+
+    query_resource_all = Query.get('resource').select(resource_fields)
+    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)
+    page.enqueue_query(query_user_all)
 
     # Prepare the display according to all metadata
     # (some parts will be pending, others can be triggered by users).
@@ -127,6 +133,18 @@ def _slice_view (request, slicename):
         sons=[],
     )
 
+    resource_query_editor = QueryEditor(
+        page  = page,
+        query = sq_resource,
+    )
+    stack_resources.insert(resource_query_editor)
+
+    resource_active_filters = ActiveFilters(
+        page  = page,
+        query = sq_resource,
+    )
+    stack_resources.insert(resource_active_filters)
+
     # --------------------------------------------------------------------------
     # Different displays = DataTables + GoogleMaps
     #
@@ -136,13 +154,13 @@ def _slice_view (request, slicename):
     )
 
     tab_resource_plugins.insert(Hazelnut( 
-        page           = page,
-        title          = 'List',
-        domid          = 'checkboxes',
+        page       = page,
+        title      = 'List',
+        domid      = 'checkboxes',
         # this is the query at the core of the slice list
-        query          = sq_resource,
-        query_all_uuid = query_resource_all.query_uuid,
-        checkboxes     = True,
+        query      = sq_resource,
+        query_all  = query_resource_all,
+        checkboxes = True,
         datatables_options = { 
             # for now we turn off sorting on the checkboxes columns this way
             # this of course should be automatic in hazelnut
@@ -152,32 +170,23 @@ def _slice_view (request, slicename):
         },
     ))
 
-    tab_resource_plugins.insert(GoogleMap(
-        page        = page,
-        title       = 'Geographic view',
-        domid       = 'gmap',
+    tab_resource_plugins.insert(GoogleMaps(
+        page       = page,
+        title      = 'Geographic view',
+        domid      = 'gmap',
         # tab's sons preferably turn this off
-        togglable   = False,
-        query       = sq_resource,
+        togglable  = False,
+        query      = sq_resource,
+        query_all  = query_resource_all,
+        checkboxes = True,
         # center on Paris
-        latitude    = 49.,
-        longitude   = 2.2,
-        zoom        = 3,
+        latitude   = 49.,
+        longitude  = 2.2,
+        zoom       = 3,
     ))
 
     stack_resources.insert(tab_resource_plugins)
 
-    # --------------------------------------------------------------------------
-    # ResourcesSelected
-    #
-    stack_resources.insert(ResourcesSelected(
-        page                = page,
-        title               = 'Pending operations',
-        resource_query_uuid = sq_resource,
-        lease_query_uuid    = sq_lease,
-        togglable           = True,
-    ))
-
     sq_plugin.insert(stack_resources)
 
     ############################################################################
@@ -201,6 +210,7 @@ def _slice_view (request, slicename):
         togglable   = False,
         # this is the query at the core of the slice list
         query       = sq_user,
+        query_all  = query_user_all,
         checkboxes  = True,
         datatables_options = { 
             # for now we turn off sorting on the checkboxes columns this way
@@ -240,127 +250,30 @@ def _slice_view (request, slicename):
 
     main_plugin.insert(sq_plugin)
 
+    # --------------------------------------------------------------------------
+    # ResourcesSelected
+    #
+    main_plugin.insert(ResourcesSelected(
+        page                = page,
+        title               = 'Pending operations',
+        query               = main_query,
+        togglable           = True,
+    ))
+
     main_plugin.insert(Messages(
         page   = page,
         title  = "Runtime messages for slice %s"%slicename,
         domid  = "msgs-pre",
         levels = "ALL",
     ))
-    main_plugin.insert(Updater(
-        page   = page,
-        title  = "wont show up as non togglable by default",
-        query  = main_query,
-        label  = "Update slice",
-    ))
+#    main_plugin.insert(Updater(
+#        page   = page,
+#        title  = "wont show up as non togglable by default",
+#        query  = main_query,
+#        label  = "Update slice",
+#    ))
     
 
-    # END OF JORDAN's CODE
-
-#old#    main_plugin = Stack (
-#old#        page=page,
-#old#        title="Slice view for %s"%slicename,
-#old#        domid='thestack',
-#old#        togglable=False,
-#old#        sons=[
-#old#            Raw (page=page,togglable=False, toggled=True,html="<h2> Slice page for %s</h2>"%slicename),
-#old#            Messages (
-#old#                page=page,
-#old#                title="Runtime messages for slice %s"%slicename,
-#old#                domid="msgs-pre",
-#old#                levels="ALL",
-#old#                ),
-#old#            Tabs (
-#old#                page=page,
-#old#                title="2 tabs : w/ and w/o checkboxes",
-#old#                domid='thetabs',
-#old#                # active_domid='checkboxes',
-#old#                active_domid='gmap',
-#old#                sons=[
-#old#                    Hazelnut ( 
-#old#                        page=page,
-#old#                        title='a sample and simple hazelnut',
-#old#                        domid='simple',
-#old#                        # tab's sons preferably turn this off
-#old#                        togglable=False,
-#old#                        # this is the query at the core of the slice list
-#old#                        query=main_query,
-#old#                        ),
-#old#                    Hazelnut ( 
-#old#                        page=page,
-#old#                        title='with checkboxes',
-#old#                        domid='checkboxes',
-#old#                        # tab's sons preferably turn this off
-#old#                        togglable=False,
-#old#                        # this is the query at the core of the slice list
-#old#                        query=main_query,
-#old#                        checkboxes=True,
-#old#                        datatables_options = { 
-#old#                            # for now we turn off sorting on the checkboxes columns this way
-#old#                            # this of course should be automatic in hazelnut
-#old#                            'aoColumns' : [ None, None, None, None, {'bSortable': False} ],
-#old#                            'iDisplayLength' : 25,
-#old#                            'bLengthChange' : True,
-#old#                            },
-#old#                        ),
-#old#                    GoogleMap (
-#old#                        page=page,
-#old#                        title='geographic view',
-#old#                        domid='gmap',
-#old#                        # tab's sons preferably turn this off
-#old#                        togglable=False,
-#old#                        query=main_query,
-#old#                        # center on Paris
-#old#                        latitude=49.,
-#old#                        longitude=2.2,
-#old#                        zoom=3,
-#old#                        ),
-#old#                    Raw (
-#old##                    SensLabMap (
-#old#                        page=page,
-#old#                        title='3D view (disabled)',
-#old#                        domid='smap',
-#old##                        # tab's sons preferably turn this off
-#old#                        togglable=False,
-#old##                        query=main_query,
-#old#                        html="""<p class='well'>
-#old#Thierry: I am commeting off the use of <button class="btn btn-danger">SensLabMap</button> which,
-#old# although rudimentarily ported to the django framework, 
-#old#causes a weird behaviour especially wrt scrolling. 
-#old#On my Mac <button class="btn btn-warning"> I cannot use the mouse to scroll</button> any longer
-#old#if I keep this active, so for now it's disabled
-#old#</p>""",
-#old#                        ),
-#old#                    ]),
-#old#            Hazelnut ( 
-#old#                page=page,
-#old#                title='a hazelnut not in tabs',
-#old#                domid='standalone',
-#old#                # this is the query at the core of the slice list
-#old#                query=main_query,
-#old#                columns=['hrn','hostname'],
-#old#                ),
-#old#              # you don't *have to* set a domid, but if you plan on using toggled=persistent then it's required
-#old#              # because domid is the key for storing toggle status in the browser
-#old#            QueryCode (
-#old#                page=page,
-#old#                title='xmlrpc code (toggled=False)',
-#old#                query=main_query,
-#old##                domid='xmlrpc',
-#old#                toggled=False,
-#old#                ),
-#old#            QuickFilter (
-#old#                page=page,
-#old#                title="QuickFilter - requires metadata (toggled=False)",
-#old#                criterias=quickfilter_criterias,
-#old#                domid='filters',
-#old#                toggled=False,
-#old#                ),
-#old#            Messages (
-#old#                page=page,
-#old#                title="Runtime messages (again)",
-#old#                domid="msgs-post",
-#old#                )
-#old#              ])
 
     # variables that will get passed to the view-unfold1.html template
     template_env = {}
@@ -369,9 +282,9 @@ def _slice_view (request, slicename):
     template_env [ 'unfold1_main' ] = main_plugin.render(request)
 
     # more general variables expected in the template
-    template_env [ 'title' ] = 'Test view that combines various plugins'
+    template_env [ 'title' ] = '%(slicename)s (test view that combines various plugins)'%locals()
     # the menu items on the top
-    template_env [ 'topmenu_items' ] = topmenu_items('slice', request) 
+    template_env [ 'topmenu_items' ] = topmenu_items('Slice', request) 
     # so we can sho who is logged
     template_env [ 'username' ] = the_user (request)