first stab at a design where each incoming API call has its own dbsession
[sfa.git] / sfa / generic / __init__.py
index 98248be..2b067ff 100644 (file)
@@ -42,6 +42,10 @@ class Generic:
         except:
             logger.log_exc("Cannot locate generic instance with flavour=%s"%flavour)
 
+    # provide default for importer_class
+    def importer_class (self): 
+        return None
+
     # in the simplest case these can be redefined to the class/module objects to be used
     # see pl.py for an example
     # some descendant of SfaApi
@@ -60,15 +64,18 @@ class Generic:
         if not 'interface' in kwargs:
             logger.critical("Generic.make_api: no interface found")
         api = self.api_class()(*args, **kwargs)
-        manager = self.make_manager(api.interface)
-        driver = self.make_driver (api.config, api.interface)
+        # xxx can probably drop support for managers implemented as modules 
+        # which makes it a bit awkward
+        manager_class_or_module = self.make_manager(api.interface)
+        driver = self.make_driver (api)
         ### arrange stuff together
         # add a manager wrapper
-        manager_wrap = ManagerWrapper(manager,api.interface)
+        manager_wrap = ManagerWrapper(manager_class_or_module,api.interface,api.config)
         api.manager=manager_wrap
         # insert driver in manager
-        logger.debug("Setting manager.driver, manager=%s"%manager)
-        manager.driver=driver
+        logger.debug("Setting manager.driver, manager=%s"%manager_class_or_module)
+        # xxx this should go into the object and not the class !?!
+        manager_class_or_module.driver=driver
         # add it in api as well for convenience
         api.driver=driver
         return api
@@ -93,7 +100,9 @@ class Generic:
             logger.log_exc_critical(message)
         
     # need interface to select the right driver
-    def make_driver (self, config, interface):
+    def make_driver (self, api):
+        config=api.config
+        interface=api.interface
         flavour = self.flavour
         message="Generic.make_driver for flavour=%s and interface=%s"%(flavour,interface)
         
@@ -104,8 +113,7 @@ class Generic:
         try:
             class_obj = getattr(self,classname)()
             logger.debug("%s : %s"%(message,class_obj))
-            return class_obj(config)
+            return class_obj(api)
         except:
             logger.log_exc_critical(message)
         
-