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 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.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.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.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.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
 debug = True
 
 @login_required
@@ -52,28 +56,30 @@ def _slice_view (request, slicename):
     page = Page(request)
     page.expose_js_metadata()
 
     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)
     # 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)
 
     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).
 
     # 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=[],
     )
 
         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
     #
     # --------------------------------------------------------------------------
     # Different displays = DataTables + GoogleMaps
     #
@@ -136,13 +154,13 @@ def _slice_view (request, slicename):
     )
 
     tab_resource_plugins.insert(Hazelnut( 
     )
 
     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
         # 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
         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
         # 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
         # center on Paris
-        latitude    = 49.,
-        longitude   = 2.2,
-        zoom        = 3,
+        latitude   = 49.,
+        longitude  = 2.2,
+        zoom       = 3,
     ))
 
     stack_resources.insert(tab_resource_plugins)
 
     ))
 
     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)
 
     ############################################################################
     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,
         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
         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)
 
 
     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(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 = {}
 
     # 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 [ '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
     # 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) 
 
     # so we can sho who is logged
     template_env [ 'username' ] = the_user (request)