getAutorities is now using rest/sfa_api avoiding cache pb in Manifold
authorLoic Baron <loic.baron@lip6.fr>
Wed, 27 May 2015 16:58:20 +0000 (18:58 +0200)
committerLoic Baron <loic.baron@lip6.fr>
Wed, 27 May 2015 16:58:20 +0000 (18:58 +0200)
portal/actions.py
portal/manageuserview.py
portal/projectrequestview.py
portal/registrationview.py
portal/slicerequestview.py
rest/sfa_api.py

index b7ee9a0..0e00312 100644 (file)
@@ -16,6 +16,8 @@ from myslice.configengine           import ConfigEngine
 
 from myslice.settings import logger
 
+from rest.sfa_api import sfa_client
+
 theme = ThemeView()
 
 import activity.slice
@@ -78,6 +80,14 @@ def get_jfed_identity(request):
         print e
         return None
 
+def getAuthorities(request, admin = False):
+    result = sfa_client(request,'List',hrn='onelab',object_type='authority',platforms=['myslice'],admin=admin)
+    authorities = list()
+    for item in result['myslice']:
+        authorities.append({'authority_hrn':item['hrn']})    
+    return sorted(authorities)
+
+
 # Get the list of pis in a given authority
 def authority_get_pis(request, authority_hrn):
     # CACHE PB with fields
index 47e6974..c93739f 100644 (file)
@@ -195,7 +195,7 @@ class UserView(LoginRequiredAutoLogoutView, ThemeView):
             for t in itertools.izip_longest(total_platform_list)]
 
         ## check pi or no
-        pi_status = authority_check_pis(self.request, user_email)
+        pi_status = request.session['user']['pi']
 
         context = super(UserView, self).get_context_data(**kwargs)
         context['principal_acc'] = principal_acc_list
index fdccd16..1f6e921 100644 (file)
@@ -1,3 +1,4 @@
+import requests
 import json
 import time
 import re
@@ -10,7 +11,7 @@ from manifoldapi.manifoldapi    import execute_admin_query, execute_query
 
 from unfold.loginrequired       import LoginRequiredAutoLogoutView
 
-from portal.actions import create_pending_project, create_pending_join, sfa_add_authority, authority_add_pis, is_pi
+from portal.actions import create_pending_project, create_pending_join, sfa_add_authority, authority_add_pis, is_pi, getAuthorities
 from portal.models import PendingProject, PendingJoin
 
 from myslice.theme import ThemeView
@@ -19,20 +20,6 @@ from myslice.settings import logger
 class ProjectRequestView(LoginRequiredAutoLogoutView, ThemeView):
     template_name = 'projectrequest_view.html'
     
-    def getAuthorities(self, request):
-        #if self.theme == 'fed4fire':
-        authorities_query = Query.get('myslice:authority').select('authority_hrn')
-        #else:
-        #    authorities_query = Query.get('authority').select('name', 'authority_hrn')
-        authorities = execute_admin_query(request, authorities_query)
-        if authorities is not None:
-            # Remove the root authority from the list
-            matching = [s for s in authorities if "." in s['authority_hrn']]
-            authorities = sorted(matching, key=lambda k: k['authority_hrn'])
-            #if self.theme != 'fed4fire':
-            #    authorities = sorted(matching, key=lambda k: k['name'])
-        return authorities
-    
     def getUserAuthority(self, request):
         # Get user_email (XXX Would deserve to be simplified)
         user_query  = Query().get('local:user').select('email','config')
@@ -86,7 +73,7 @@ class ProjectRequestView(LoginRequiredAutoLogoutView, ThemeView):
 
         user_email = self.getUserEmail(wsgi_request)
         
-        authorities = self.getAuthorities(wsgi_request)
+        authorities = getAuthorities(wsgi_request)
         
         user_authority = self.getUserAuthority(wsgi_request)
         
index 47fcd05..76d712d 100644 (file)
@@ -18,7 +18,7 @@ from manifoldapi.manifoldapi    import execute_admin_query
 from manifold.core.query        import Query
 
 from portal.models              import PendingUser
-from portal.actions             import create_pending_user
+from portal.actions             import create_pending_user, getAuthorities
 
 from myslice.theme import ThemeView
 from myslice.settings import logger
@@ -41,15 +41,18 @@ class RegistrationView (FreeAccessView, ThemeView):
         """
         """
         errors = []
-        authority_hrn = None
-        # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2
-        authorities_query = Query.get('authority').select('name', 'authority_hrn')
-        authorities = execute_admin_query(wsgi_request, authorities_query)
-        if authorities is not None:
-            # Remove the root authority from the list
-            matching = [s for s in authorities if "." in s['authority_hrn']]
-            authorities = sorted(matching, key=lambda k: k['authority_hrn'])
-            authorities = sorted(matching, key=lambda k: k['name'])
+
+        authorities = getAuthorities(wsgi_request, admin = True)
+
+        #authority_hrn = None
+        ## REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2
+        #authorities_query = Query.get('authority').select('name', 'authority_hrn')
+        #authorities = execute_admin_query(wsgi_request, authorities_query)
+        #if authorities is not None:
+        #    # Remove the root authority from the list
+        #    matching = [s for s in authorities if "." in s['authority_hrn']]
+        #    authorities = sorted(matching, key=lambda k: k['authority_hrn'])
+        #    authorities = sorted(matching, key=lambda k: k['name'])
         
         logger.debug("############ BREAKPOINT 1 #################")
         # Page rendering
index 47951a3..a2b0dd0 100644 (file)
@@ -11,7 +11,7 @@ from unfold.page                import Page
 from manifold.core.query        import Query
 from manifoldapi.manifoldapi    import execute_admin_query, execute_query
 
-from portal.actions             import is_pi, create_slice, create_pending_slice, clear_user_creds, authority_check_pis
+from portal.actions             import is_pi, create_slice, create_pending_slice, clear_user_creds, authority_check_pis, getAuthorities
 #from portal.forms               import SliceRequestForm
 from unfold.loginrequired       import LoginRequiredAutoLogoutView
 from ui.topmenu                 import topmenu_items_live, the_user
@@ -44,15 +44,18 @@ class SliceRequestView (LoginRequiredAutoLogoutView, ThemeView):
         authority_hrn = None
         authority_name = None
         # Retrieve the list of authorities
-        #if self.theme == 'fed4fire' or self.theme == 'onelab':
-        authorities_query = Query.get('myslice:authority').select('authority_hrn')
-        #else:
-        #    authorities_query = Query.get('authority').select('name', 'authority_hrn')
-        authorities = execute_admin_query(request, authorities_query)
-        if authorities is not None:
-            authorities = sorted(authorities, key=lambda k: k['authority_hrn'])
-            #if self.theme != 'fed4fire' or  self.theme != 'onelab':
-            #    authorities = sorted(authorities, key=lambda k: k['name'])
+
+        authorities = getAuthorities(request, admin=True)
+
+        ##if self.theme == 'fed4fire' or self.theme == 'onelab':
+        #authorities_query = Query.get('myslice:authority').select('authority_hrn')
+        ##else:
+        ##    authorities_query = Query.get('authority').select('name', 'authority_hrn')
+        #authorities = execute_admin_query(request, authorities_query)
+        #if authorities is not None:
+        #    authorities = sorted(authorities, key=lambda k: k['authority_hrn'])
+        #    #if self.theme != 'fed4fire' or  self.theme != 'onelab':
+        #    #    authorities = sorted(authorities, key=lambda k: k['name'])
 
         # Get user_email (XXX Would deserve to be simplified)
         user_query  = Query().get('local:user').select('email','config')
@@ -88,15 +91,7 @@ class SliceRequestView (LoginRequiredAutoLogoutView, ThemeView):
                         user_hrn = account_config.get('user_hrn','N/A')
         #                acc_auth_cred = account_config.get('delegated_authority_credentials','N/A')
 
-
-        # checking if pi or not
-        #if acc_auth_cred == {} or acc_auth_cred == 'N/A':
-        #    pi = "is_not_pi"
-        #else:
-        #    pi = "is_pi"
-
-        pi = authority_check_pis (request, user_email)
-        logger.debug("SLICEREQUESTVIEW.PY -----  pi= {}".format(pi))
+        pi = request.session['user']['pi']
 
         # Page rendering
         page = Page(request)
index 1ed0941..72f2f92 100644 (file)
@@ -20,26 +20,22 @@ from manifold.models.user       import User
 
 from unfold.loginrequired       import LoginRequiredView
 
-from myslice.settings           import logger
+from myslice.settings           import logger, config
 
 from rest.json_encoder          import MyEncoder
 
 def dispatch(request, method):
-    Config = ConfigParser.ConfigParser()
-    Config.read(os.getcwd() + "/myslice/monitor.ini")
-
-    #logger.debug(request.session['user']['email'])
-    user_email = request.session['user']['email']
 
-    platforms = list()
-    options   = dict()
-    rspec = ''
-    results = dict()
-    urn = ''
     hrn = ''
+    urn = ''
     object_type = ''
-    display = None
+    rspec = ''
     recursive = False
+    options   = dict()
+    platforms = list()
+
+    results = dict()
+    display = None
 
     if request.method == 'POST':
         req_items = request.POST
@@ -67,6 +63,58 @@ def dispatch(request, method):
         elif el[0].startswith('display'):
             display = el[1]
 
+    results = sfa_client(request, method, hrn, urn, object_type, recursive, options, platforms)
+
+    if display == 'table':
+        return render_to_response('table-default.html', {'data' : data, 'fields' : columns, 'id' : '@component_id', 'options' : None})
+    else:
+        return HttpResponse(json.dumps(results, cls=MyEncoder), content_type="application/json")
+
+def get_user_account(user_email, platform_name):
+    """
+    Returns the user configuration for a given platform.
+    This function does not resolve references.
+    """
+    user = db.query(User).filter(User.email == user_email).one()
+    platform = db.query(Platform).filter(Platform.platform == platform_name).one()
+    accounts = [a for a in user.accounts if a.platform == platform]
+    if not accounts:
+        raise Exception, "this account does not exist"
+
+    if accounts[0].auth_type == 'reference':
+        pf = json.loads(accounts[0].config)['reference_platform']
+        return get_user_account(user_email, pf)
+
+    return accounts[0]
+
+def sfa_client(request, method, hrn=None, urn=None, object_type=None, rspec=None, recursive=None, options=None, platforms=None, admin=False):
+
+    Config = ConfigParser.ConfigParser()
+    Config.read(os.getcwd() + "/myslice/monitor.ini")
+
+    if admin:
+        user_email, admin_password = config.manifold_admin_user_password()
+    else:
+        #logger.debug(request.session['user']['email'])
+        user_email = request.session['user']['email']
+
+    results = dict()
+
+    if hrn is None:
+        hrn = ''
+    if urn is None:
+        urn = ''
+    if object_type is None:
+        object_type = ''
+    if rspec is None:
+        rspec = ''
+    if recursive is None:
+        recursive = False
+    if options is None:
+        options  = dict()
+    if platforms is None:
+        platforms = list()
+
     if method not in ['GetVersion','ListResources']:
         try:
             if not hrn:
@@ -128,6 +176,8 @@ def dispatch(request, method):
             user_config = get_user_config(user_email, pf)
             if 'delegated_user_credential' in user_config:
                 user_cred = user_config['delegated_user_credential']
+            elif 'user_credential' in user_config:
+                user_cred = user_config['user_credential']
             else:
                 user_cred = {}
 
@@ -136,6 +186,10 @@ def dispatch(request, method):
                     for obj_name, cred in user_config['delegated_%s_credentials'%object_type].items():
                         if obj_name == hrn:
                             object_cred = cred
+                elif '%s_credentials'%object_type in user_config:
+                    for obj_name, cred in user_config['%s_credentials'%object_type].items():
+                        if obj_name == hrn:
+                            object_cred = cred
 
             # Both AM & Registry
             if method == "GetVersion": 
@@ -214,15 +268,15 @@ def dispatch(request, method):
                     record_dict = {'urn': urn, 'hrn': hrn, 'type': object_type}
                     if method == "List":
                         # hrn is required
-                        options['recursive'] = recursive
-                        result = server.List(hrn, user_cred, options)
+                        api_options['recursive'] = recursive
+                        result = server.List(hrn, user_cred, api_options)
                         if object_type:
                             result = filter_records(object_type, result)
                     elif method == "Resolve":
                         # hrn is required
                         # details can be True or False
-                        options['details']=True
-                        result = server.Resolve(hrn, user_cred, options)
+                        api_options['details']=True
+                        result = server.Resolve(hrn, user_cred, api_options)
                         if object_type:
                             result = filter_records(object_type, result)
                     elif method == "Register":
@@ -255,28 +309,9 @@ def dispatch(request, method):
             logger.error(traceback.format_exc())
             logger.error(e)
             results[pf] = {'error':'-3', 'error_msg': str(e)}
-    if display == 'table':
-        return render_to_response('table-default.html', {'data' : data, 'fields' : columns, 'id' : '@component_id', 'options' : None})
-    else:
-        results['columns'] = columns
-        return HttpResponse(json.dumps(results, cls=MyEncoder), content_type="application/json")
 
-def get_user_account(user_email, platform_name):
-    """
-    Returns the user configuration for a given platform.
-    This function does not resolve references.
-    """
-    user = db.query(User).filter(User.email == user_email).one()
-    platform = db.query(Platform).filter(Platform.platform == platform_name).one()
-    accounts = [a for a in user.accounts if a.platform == platform]
-    if not accounts:
-        raise Exception, "this account does not exist"
-
-    if accounts[0].auth_type == 'reference':
-        pf = json.loads(accounts[0].config)['reference_platform']
-        return get_user_account(user_email, pf)
-
-    return accounts[0]
+    results['columns'] = columns
+    return results
 
 def get_user_config(user_email, platform_name):
     account = get_user_account(user_email, platform_name)