-from sfa.util.faults import SfaNotImplemented
-from sfa.util.sfalogging import logger
+from types import ModuleType, ClassType
-## locate the right manager
-def import_manager(kind, type):
- """
- kind expected in ['registry', 'aggregate', 'slice', 'component']
- type is e.g. 'pl' or 'max' or whatever
- """
- basepath = 'sfa.managers'
- qualified = "%s.%s_manager_%s"%(basepath,kind,type)
- generic = "%s.%s_manager"%(basepath,kind)
+from sfa.util.faults import SfaNotImplemented, SfaAPIError
+from sfa.util.sfalogging import logger
- message="import_manager for kind=%s and type=%s"%(kind,type)
- try:
- manager = __import__(qualified, fromlist=[basepath])
- logger.info ("%s: loaded %s"%(message,qualified))
- except:
- try:
- manager = __import__ (generic, fromlist=[basepath])
- if type != 'pl' :
- logger.warn ("%s: using generic with type!='pl'"%(message))
- logger.info("%s: loaded %s"%(message,generic))
- except:
- manager=None
- logger.log_exc("%s: unable to import either %s or %s"%(message,qualified,generic))
- return manager
-
####################
class ManagerWrapper:
"""
the standard AttributeError
"""
def __init__(self, manager, interface):
- self.manager = manager
+ 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()
+ 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)