Fixed parsing fonction problem for slab-import.py.
[sfa.git] / sfa / senslab / slabdriver.py
index 8f6ab41..621ed72 100644 (file)
@@ -1,3 +1,5 @@
+import sys
+
 from sfa.util.faults import MissingSfaInfo
 from sfa.util.sfalogging import logger
 from sfa.util.table import SfaTable
@@ -10,30 +12,11 @@ from sfa.util.plxrn import slicename_to_hrn, hostname_to_hrn, hrn_to_pl_slicenam
 # is taken care of 
 # SlabDriver should be really only about talking to the senslab testbed
 
-## thierry: this class sohuld be *much* simpler now, just use what you really need
-#import sys
-#import os
-#import traceback
-#import string
-#import datetime
-#import xmlrpclib
-#
-#from sfa.util.faults import *
-#from sfa.util.api import *
-#from sfa.util.config import *
-#from sfa.util.sfalogging import logger
-#import sfa.util.xmlrpcprotocol as xmlrpcprotocol
-#from sfa.trust.auth import Auth
-#from sfa.trust.rights import Right, Rights, determine_rights
-#from sfa.trust.credential import Credential,Keypair
-#from sfa.trust.certificate import Certificate
-#from sfa.util.xrn import get_authority, hrn_to_urn
-#from sfa.util.plxrn import hostname_to_hrn, hrn_to_pl_slicename, hrn_to_pl_slicename, slicename_to_hrn
-#from sfa.util.nodemanager import NodeManager
-
 ## thierry : please avoid wildcard imports :)
-from sfa.senslab.OARrestapi import *
-from sfa.senslab.SenslabImportUsers import *
+from sfa.senslab.OARrestapi import OARapi
+from sfa.senslab.LDAPapi import LDAPapi
+from sfa.senslab.SenslabImportUsers import SenslabImportUsers
+from sfa.senslab.parsing import parse_filter
 
 def list_to_dict(recs, key):
     """
@@ -45,26 +28,50 @@ def list_to_dict(recs, key):
     #print>>sys.stderr, " \r\n \t\t list_to_dict : rec %s  \r\n \t\t list_to_dict keys %s" %(recs,keys)   
     return dict(zip(keys, recs))
 
-class SlabDriver:
+# thierry : note
+# this inheritance scheme is so that the driver object can receive
+# GetNodes or GetSites sorts of calls directly
+# and thus minimize the differences in the managers with the pl version
+class SlabDriver ():
 
     def __init__(self, config):
+       
         self.config=config
         self.hrn = config.SFA_INTERFACE_HRN
+    
+        self.root_auth = config.SFA_REGISTRY_ROOT_AUTH
+
+        
        print >>sys.stderr, "\r\n_____________ SFA SENSLAB DRIVER \r\n" 
-        # thierry : note
-        # this class chould be able to somehow call this API
-        # in the pl case see the PlShell class that does exactly that
-        # I mean, the rest of the code is going to make calls like
-        # api.driver.GetNodes
-        # which will result in this class (SlabDriver) receiving the GetNodes call
-        # you might wish for example to have SlabDriver inherit the OARapi class instead
+        # thierry - just to not break the rest of this code
+       #self.oar = OARapi()
+       #self.users = SenslabImportUsers()
        self.oar = OARapi()
-       self.users = SenslabImportUsers()
+       self.ldap = LDAPapi()
+        self.users = SenslabImportUsers()
         self.time_format = "%Y-%m-%d %H:%M:%S"
         #self.logger=sfa_logger()
-       print >>sys.stderr, "\r\n \t\t___________PSFA SENSLAN /API.PY  __init__ STOP ",self.interface #dir(self)
+      
        
+    def GetPersons(self, person_filter=None, return_fields=None):
+
+        person_list = self.ldap.ldapFind({'authority': self.root_auth })
+        return_person_list = parse_filter(person_list,person_filter ,'persons', return_fields)
+        return return_person_list
+    
+    def GetNodes(self,node_filter= None, return_fields=None):
+               
+        self.oar.parser.SendRequest("GET_resources_full")
+        node_dict = self.oar.parser.GetNodesFromOARParse()
+        return_node_list = []
+
+        if not (node_filter or return_fields):
+                return_node_list = node_dict.values()
+                return return_node_list
+    
+        return_node_list= parse_filter(node_dict.values(),node_filter ,'node', return_fields)
+        return return_node_list
+    
     ##
     # Convert SFA fields to PLC fields for use when registering up updating
     # registry record in the PLC database
@@ -147,7 +154,7 @@ class SlabDriver:
         # get pl records
         nodes, sites, slices, persons, keys = {}, {}, {}, {}, {}
         if node_ids:
-            node_list = self.oar.GetNodes( node_ids)
+            node_list = self.GetNodes( node_ids)
            #print>>sys.stderr, " \r\n \t\t\t BEFORE LIST_TO_DICT_NODES node_ids : %s" %(node_ids)
             nodes = list_to_dict(node_list, 'node_id')
         if site_ids:
@@ -159,7 +166,7 @@ class SlabDriver:
             slices = list_to_dict(slice_list, 'slice_id')
         if person_ids:
             #print>>sys.stderr, " \r\n \t\t \t fill_record_pl_info BEFORE GetPersons  person_ids: %s" %(person_ids)
-            person_list = self.users.GetPersons( person_ids)
+            person_list = self.GetPersons( person_ids)
             persons = list_to_dict(person_list, 'person_id')
            #print>>sys.stderr, "\r\n  fill_record_pl_info persons %s \r\n \t\t person_ids %s " %(persons, person_ids) 
             for person in persons:
@@ -228,14 +235,14 @@ class SlabDriver:
             sites = list_to_dict(site_list, 'site_id')
            #print>>sys.stderr, " \r\n \r\n \t\t ____ site_list %s \r\n \t\t____ sites %s " % (site_list,sites)
         if person_ids:
-            person_list = self.users.GetPersons( person_ids, ['person_id', 'email'])
+            person_list = self.GetPersons( person_ids, ['person_id', 'email'])
            #print>>sys.stderr, " \r\n \r\n   \t\t____ person_lists %s " %(person_list) 
             persons = list_to_dict(person_list, 'person_id')
         if slice_ids:
             slice_list = self.users.GetSlices( slice_ids, ['slice_id', 'name'])
             slices = list_to_dict(slice_list, 'slice_id')       
         if node_ids:
-            node_list = self.oar.GetNodes( node_ids, ['node_id', 'hostname'])
+            node_list = self.GetNodes( node_ids, ['node_id', 'hostname'])
             nodes = list_to_dict(node_list, 'node_id')
        
         # convert ids to hrns
@@ -302,7 +309,7 @@ class SlabDriver:
         site_pis = {}
         if site_ids:
             pi_filter = {'|roles': ['pi'], '|site_ids': site_ids} 
-            pi_list = SenslabUsers.GetPersons( pi_filter, ['person_id', 'site_ids'])
+            pi_list = self.GetPersons( pi_filter, ['person_id', 'site_ids'])
            #print>>sys.stderr, "\r\n \r\n _fill_record_sfa_info ___ GetPersons ['person_id', 'site_ids'] pi_ilist %s" %(pi_list)
 
             for pi in pi_list:
@@ -334,7 +341,7 @@ class SlabDriver:
 
         # get the pl records
         pl_person_list, pl_persons = [], {}
-        pl_person_list = SenslabUsers.GetPersons(person_ids, ['person_id', 'roles'])
+        pl_person_list = self.GetPersons(person_ids, ['person_id', 'roles'])
         pl_persons = list_to_dict(pl_person_list, 'person_id')
         #print>>sys.stderr, "\r\n \r\n _fill_record_sfa_info ___  _list %s \r\n \t\t SenslabUsers.GetPersons ['person_id', 'roles'] pl_persons %s \r\n records %s" %(pl_person_list, pl_persons,records) 
         # fill sfa info