def load_directory(self, sub_dir, base_type): # Load directory module first m = __import__(sub_dir) for module_name in getattr(self, sub_dir): Logr.info("Loading '%s.%s'" % (sub_dir, module_name)) __import__(sub_dir + '.' + module_name) module = getattr(m, module_name) # Find classes that extend the 'base_type' base class module_class = None for name, obj in inspect.getmembers(module, inspect.isclass): if obj is not base_type and issubclass(obj, base_type): if module_class is None: module_class = obj else: Logr.warning("Only one class is allowed per module") if module_class is not None: spec = { 'module_name': sub_dir + '.' + module_name, 'module': module, 'class': module_class, 'detail': module_class.__detail__, 'options': module_class.__options__ } getattr(self, sub_dir)[module_name] = spec self.modules[sub_dir + '.' + module_name] = spec else: Logr.warning("Unable to find class inside module '%s.%s'" % (sub_dir, module_name))