コード例 #1
0
    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))