-from sfa.util.faults import SfaNotImplemented
+from types import ModuleType, ClassType
+
+from sfa.util.faults import SfaNotImplemented, SfaAPIError
from sfa.util.sfalogging import logger
####################
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:
+ # that's what happens when there's something wrong with the db
+ # or any bad stuff of that kind at startup time
+ logger.log_exc("Failed to create a manager, startup sequence is broken")
+ 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)