Merge branch 'master' of ssh://git.onelab.eu/git/myslice
authorLoic Baron <loic.baron@lip6.fr>
Fri, 13 Dec 2013 17:38:13 +0000 (18:38 +0100)
committerLoic Baron <loic.baron@lip6.fr>
Fri, 13 Dec 2013 17:38:13 +0000 (18:38 +0100)
Conflicts:
manifold/manifoldapi.py

1  2 
manifold/manifoldapi.py
portal/sliceview.py

diff --combined manifold/manifoldapi.py
@@@ -132,11 -132,11 +132,14 @@@ def _execute_query(request, query, mani
      print "-"*80
      result = manifold_api.forward(query.to_dict())
      if result['code'] == 2:
 -        # del request.session['manifold']
 -        raise Exception, 'Error running query: %r' % result
+         # this is gross; at the very least we need to logout() 
+         # but most importantly there is a need to refine that test, since 
+         # code==2 does not necessarily mean an expired session
 +        # XXX only if we know it is the issue
 +        del request.session['manifold']
 +        # Flush django session
 +        request.session.flush()
 +        #raise Exception, 'Error running query: %r' % result
      
      if result['code'] == 1:
          print "WARNING" 
  
  def execute_query(request, query):
      if not 'manifold' in request.session or not 'auth' in request.session['manifold']:
 +        request.session.flush()
          raise Exception, "User not authenticated"
      manifold_api_session_auth = request.session['manifold']['auth']
      return _execute_query(request, query, manifold_api_session_auth)
diff --combined portal/sliceview.py
@@@ -1,4 -1,3 +1,4 @@@
 +import json
  from django.template                 import RequestContext
  from django.shortcuts                import render_to_response
  
@@@ -6,7 -5,6 +6,7 @@@ from unfold.loginrequired            im
  
  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
  
@@@ -34,8 -32,8 +34,8 @@@ from myslice.config                  im
  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
@@@ -71,7 -69,8 +71,8 @@@ class SliceView (LoginRequiredAutoLogou
          main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename)
          main_query.select(
                  'slice_hrn',
-                 'resource.hrn', 'resource.urn', 'resource.hostname', 'resource.type', 
+                 #'resource.hrn', 'resource.urn', 
+                 'resource.hostname', 'resource.type', 
                  'resource.network_hrn',
                  'lease.urn',
                  'user.user_hrn',
          )
          # for internal use in the querytable plugin;
          # needs to be a unique column present for each returned record
-         #main_query_key = 'hrn'
+         main_query_init_key = 'hostname'
      
          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:
 -            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
              togglable  = False,
              query      = sq_resource,
              query_all  = query_resource_all,
+             # this key is the one issued by google
              googlemap_api_key = Config().googlemap_api_key(),
+             # the key to use at init-time
+             init_key   = main_query_init_key,
              checkboxes = True,
              # center on Paris
              latitude   = 49.,
              # 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,
+             # use 'hrn' as the internal unique key for this plugin
+             init_key     = main_query_init_key,
              checkboxes = True,
              datatables_options = { 
                  'iDisplayLength': 25,
                  # 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,
+                 # use 'hrn' as the internal unique key for this plugin
+                 # xxx todo on querygrid as well
+                 # init_key     = main_query_init_key,
                  checkboxes = True,
                  )
  
          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",
                                  togglable=True,
          # --------------------------------------------------------------------------
          # USERS
      
 -        if do_query_users:
 +        if do_query_users and query_user_all is not None:
              tab_users = Tabs(
                  page                = page,
                  domid               = 'users',