last plc-dependent code moved to PlDriver
[sfa.git] / sfa / managers / managerwrapper.py
index 5231c2a..58a0527 100644 (file)
@@ -1,4 +1,6 @@
-from sfa.util.faults import SfaNotImplemented
+from types import ModuleType, ClassType
+
+from sfa.util.faults import SfaNotImplemented, SfaAPIError
 from sfa.util.sfalogging import logger
 
 ####################
@@ -13,12 +15,20 @@ class ManagerWrapper:
     is not implemented by a libarary and will generally be more helpful than
     the standard AttributeError         
     """
-    def __init__(self, manager, interface):
-        self.manager = manager
+    def __init__(self, manager, interface, config):
+        if isinstance (manager, ModuleType):
+            # old-fashioned module implementation
+            self.manager = manager
+        elif isinstance (manager, ClassType):
+            # create an instance; we don't pass the api in argument as it is passed 
+            # to the actual method calls anyway
+            self.manager = manager(config)
+        else:
+            raise SfaAPIError,"Argument to ManagerWrapper must be a module or class"
         self.interface = interface
         
     def __getattr__(self, method):
         if not hasattr(self.manager, method):
-            raise SfaNotImplemented(method, self.interface)
+            raise SfaNotImplemented(self.interface, method)
         return getattr(self.manager, method)