iotlabshell won’t use global dbsession anymore
[sfa.git] / sfa / iotlab / iotlabshell.py
index 1bed89c..d885116 100644 (file)
@@ -8,7 +8,6 @@ from datetime import datetime
 
 from sfa.util.sfalogging import logger
 
-from sfa.storage.alchemy import dbsession
 from sqlalchemy.orm import joinedload
 from sfa.storage.model import RegRecord, RegUser, RegSlice, RegKey
 from sfa.iotlab.iotlabpostgres import TestbedAdditionalSfaDB, LeaseTableXP
@@ -28,7 +27,7 @@ class IotlabShell():
 
     _MINIMUM_DURATION = 10  # 10 units of granularity 60 s, 10 mins
 
-    def __init__(self, config):
+    def __init__(self, api):
         """Creates an instance of OARrestapi and LDAPapi which will be used to
         issue calls to OAR or LDAP methods.
         Set the time format  and the testbed granularity used for OAR
@@ -37,7 +36,9 @@ class IotlabShell():
         :param config: configuration object from sfa.util.config
         :type config: Config object
         """
-        self.iotlab_db = TestbedAdditionalSfaDB(config)
+        self.api=api
+        config=api.config
+        self.leases_db = TestbedAdditionalSfaDB(config)
         self.oar = OARrestapi()
         self.ldap = LDAPapi()
         self.time_format = "%Y-%m-%d %H:%M:%S"
@@ -57,8 +58,8 @@ class IotlabShell():
         """
         return IotlabShell._MINIMUM_DURATION
 
-    @staticmethod
-    def GetPeers(peer_filter=None ):
+
+    def GetPeers(self, peer_filter=None ):
         """ Gathers registered authorities in SFA DB and looks for specific peer
         if peer_filter is specified.
         :param peer_filter: name of the site authority looked for.
@@ -70,7 +71,7 @@ class IotlabShell():
         existing_records = {}
         existing_hrns_by_types = {}
         logger.debug("IOTLAB_API \tGetPeers peer_filter %s " % (peer_filter))
-        all_records = dbsession.query(RegRecord).filter(RegRecord.type.like('%authority%')).all()
+        all_records = self.api.dbsession().query(RegRecord).filter(RegRecord.type.like('%authority%')).all()
 
         for record in all_records:
             existing_records[(record.hrn, record.type)] = record
@@ -405,9 +406,7 @@ class IotlabShell():
         return return_node_list
 
 
-
-    @staticmethod
-    def AddSlice(slice_record, user_record):
+    def AddSlice(self, slice_record, user_record):
         """
 
         Add slice to the local iotlab sfa tables if the slice comes
@@ -430,11 +429,11 @@ class IotlabShell():
         logger.debug("IOTLAB_API.PY AddSlice  sfa_record %s user_record %s"
                      % (sfa_record, user_record))
         sfa_record.just_created()
-        dbsession.add(sfa_record)
-        dbsession.commit()
+        self.api.dbsession().add(sfa_record)
+        self.api.dbsession().commit()
         #Update the reg-researcher dependance table
         sfa_record.reg_researchers = [user_record]
-        dbsession.commit()
+        self.api.dbsession().commit()
 
         return
 
@@ -526,8 +525,8 @@ class IotlabShell():
                     delete_failed))
         return delete_failed or True
 
-    @staticmethod
-    def __add_person_to_db(user_dict):
+
+    def __add_person_to_db(self, user_dict):
         """
         Add a federated user straight to db when the user issues a lease
         request with iotlab nodes and that he has not registered with iotlab
@@ -540,7 +539,7 @@ class IotlabShell():
 
         """
         check_if_exists = \
-        dbsession.query(RegUser).filter_by(email = user_dict['email']).first()
+        self.api.dbsession().query(RegUser).filter_by(email = user_dict['email']).first()
         #user doesn't exists
         if not check_if_exists:
             logger.debug("__add_person_to_db \t Adding %s \r\n \r\n \
@@ -572,8 +571,8 @@ class IotlabShell():
                                     email=user_dict['email'], gid = person_gid)
             user_record.reg_keys = [RegKey(user_dict['pkey'])]
             user_record.just_created()
-            dbsession.add (user_record)
-            dbsession.commit()
+            self.api.dbsession().add (user_record)
+            self.api.dbsession().commit()
         return
 
 
@@ -847,8 +846,8 @@ class IotlabShell():
 
         logger.debug("IOTLAB_API \r\n \r\n \t AddLeases iotlab_ex_row %s" \
                 %(iotlab_ex_row))
-        self.iotlab_db.testbed_session.add(iotlab_ex_row)
-        self.iotlab_db.testbed_session.commit()
+        self.leases_db.testbed_session.add(iotlab_ex_row)
+        self.leases_db.testbed_session.commit()
 
         logger.debug("IOTLAB_API \t AddLeases hostname_list start_time %s " \
                 %(start_time))
@@ -954,7 +953,7 @@ class IotlabShell():
         #the same user in LDAP SA 27/07/12
         job_oar_list = []
 
-        jobs_psql_query = self.iotlab_db.testbed_session.query(LeaseTableXP).all()
+        jobs_psql_query = self.leases_db.testbed_session.query(LeaseTableXP).all()
         jobs_psql_dict = dict([(row.experiment_id, row.__dict__)
                                for row in jobs_psql_query])
         #jobs_psql_dict = jobs_psql_dict)
@@ -1020,7 +1019,7 @@ class IotlabShell():
         if lease_filter_dict is None:
             reservation_list = unfiltered_reservation_list
 
-        self.iotlab_db.update_experiments_in_additional_sfa_db(job_oar_list, jobs_psql_id_list)
+        self.leases_db.update_experiments_in_additional_sfa_db(job_oar_list, jobs_psql_id_list)
 
         logger.debug(" IOTLAB_API.PY \tGetLeases reservation_list %s"
                      % (reservation_list))
@@ -1101,14 +1100,14 @@ class IotlabShell():
 
         #"""
         ##new_row = FederatedToIotlab(iotlab_hrn, federated_hrn)
-        ##self.iotlab_db.testbed_session.add(new_row)
-        ##self.iotlab_db.testbed_session.commit()
+        ##self.leases_db.testbed_session.add(new_row)
+        ##self.leases_db.testbed_session.commit()
 
         #logger.debug("IOTLAB_API UpdatePerson EMPTY - DO NOTHING \r\n ")
         #return
 
-    @staticmethod
-    def GetKeys(key_filter=None):
+
+    def GetKeys(self, key_filter=None):
         """Returns a dict of dict based on the key string. Each dict entry
         contains the key id, the ssh key, the user's email and the
         user's hrn.
@@ -1122,9 +1121,9 @@ class IotlabShell():
         :rtype: dict
         """
         if key_filter is None:
-            keys = dbsession.query(RegKey).options(joinedload('reg_user')).all()
+            keys = self.api.dbsession().query(RegKey).options(joinedload('reg_user')).all()
         else:
-            keys = dbsession.query(RegKey).options(joinedload('reg_user')).filter(RegKey.key.in_(key_filter)).all()
+            keys = self.api.dbsession().query(RegKey).options(joinedload('reg_user')).filter(RegKey.key.in_(key_filter)).all()
 
         key_dict = {}
         for key in keys:
@@ -1162,10 +1161,7 @@ class IotlabShell():
         return ret['bool']
 
 
-
-
-    @staticmethod
-    def _sql_get_slice_info(slice_filter):
+    def _sql_get_slice_info(self, slice_filter):
         """
         Get the slice record based on the slice hrn. Fetch the record of the
         user associated with the slice by using joinedload based on the
@@ -1184,8 +1180,8 @@ class IotlabShell():
 
         #Only one entry for one user  = one slice in testbed_xp table
         #slicerec = dbsession.query(RegRecord).filter_by(hrn = slice_filter).first()
-        raw_slicerec = dbsession.query(RegSlice).options(joinedload('reg_researchers')).filter_by(hrn=slice_filter).first()
-        #raw_slicerec = dbsession.query(RegRecord).filter_by(hrn = slice_filter).first()
+        raw_slicerec = self.api.dbsession().query(RegSlice).options(joinedload('reg_researchers')).filter_by(hrn=slice_filter).first()
+        #raw_slicerec = self.api.dbsession().query(RegRecord).filter_by(hrn = slice_filter).first()
         if raw_slicerec:
             #load_reg_researcher
             #raw_slicerec.reg_researchers
@@ -1201,8 +1197,7 @@ class IotlabShell():
         else:
             return None
 
-    @staticmethod
-    def _sql_get_slice_info_from_user(slice_filter):
+    def _sql_get_slice_info_from_user(self, slice_filter):
         """
         Get the slice record based on the user recordid by using a joinedload
         on the relationship reg_slices_as_researcher. Format the sql record
@@ -1212,8 +1207,8 @@ class IotlabShell():
         :rtype:dict or None..
         """
         #slicerec = dbsession.query(RegRecord).filter_by(record_id = slice_filter).first()
-        raw_slicerec = dbsession.query(RegUser).options(joinedload('reg_slices_as_researcher')).filter_by(record_id=slice_filter).first()
-        #raw_slicerec = dbsession.query(RegRecord).filter_by(record_id = slice_filter).first()
+        raw_slicerec = self.api.dbsession().query(RegUser).options(joinedload('reg_slices_as_researcher')).filter_by(record_id=slice_filter).first()
+        #raw_slicerec = self.api.dbsession().query(RegRecord).filter_by(record_id = slice_filter).first()
         #Put it in correct order
         user_needed_fields = ['peer_authority', 'hrn', 'last_updated',
                               'classtype', 'authority', 'gid', 'record_id',
@@ -1394,7 +1389,7 @@ class IotlabShell():
             #put them in dict format
             #query_slice_list = dbsession.query(RegRecord).all()
             query_slice_list = \
-                dbsession.query(RegSlice).options(joinedload('reg_researchers')).all()
+                self.api.dbsession().query(RegSlice).options(joinedload('reg_researchers')).all()
 
             for record in query_slice_list:
                 tmp = record.__dict__