- # how to build an API object
- # default is to use api_class but can be redefined
- def make_api (self, *args, **kwds):
- return self.api_class()(*args, **kwds)
+ def make_manager(self, interface):
+ """
+ interface expected in ['registry', 'aggregate', 'slicemgr', 'component']
+ flavour is e.g. 'pl' or 'max' or whatever
+ """
+ flavour = self.flavour
+ message = "Generic.make_manager for interface=%s and flavour=%s" % (
+ interface, flavour)
+
+ classname = "%s_manager_class" % interface
+ try:
+ module_or_class = getattr(self, classname)()
+ logger.debug("%s : %s" % (message, module_or_class))
+ # this gets passed to ManagerWrapper that will call the class constructor
+ # if it's a class, or use the module as is if it's a module
+ # so bottom line is, don't try the constructor here
+ return module_or_class
+ except:
+ logger.log_exc_critical(message)
+
+ # need interface to select the right driver
+ 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)
+
+ if interface == "component":
+ classname = "component_driver_class"
+ else:
+ classname = "driver_class"
+ try:
+ class_obj = getattr(self, classname)()
+ logger.debug("%s : %s" % (message, class_obj))
+ return class_obj(api)
+ except:
+ logger.log_exc_critical(message)