diff options
| author | 2019-09-27 16:03:06 +0100 | |
|---|---|---|
| committer | 2019-09-27 16:03:06 +0100 | |
| commit | 82173a7d942500e00f57f482806cd4762caf67b2 (patch) | |
| tree | a44537fbf9a6e5121c451126b422405f874ce2f5 /src | |
| parent | forgot to commit kwargs for get_user() (diff) | |
| signature | ||
add external_modules directory
Diffstat (limited to 'src')
| -rw-r--r-- | src/ModuleManager.py | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/src/ModuleManager.py b/src/ModuleManager.py index bd9bfa1a..76a3e8ee 100644 --- a/src/ModuleManager.py +++ b/src/ModuleManager.py @@ -92,26 +92,27 @@ class ModuleManager(object): timers: Timers.Timers, config: Config.Config, log: Logging.Log, - directory: str): + directories: typing.List[str]): self.events = events self.exports = exports self.config = config self.timers = timers self.log = log - self.directory = directory + self.directories = directories self.modules = {} # type: typing.Dict[str, LoadedModule] def list_modules(self) -> typing.List[ModuleDefinition]: modules = [] - for file_module in glob.glob(os.path.join(self.directory, "*.py")): - modules.append(self.define_module(ModuleType.FILE, file_module)) + for directory in self.directories: + for file_module in glob.glob(os.path.join(directory, "*.py")): + modules.append(self.define_module(ModuleType.FILE, file_module)) - for directory_module in glob.glob(os.path.join( - self.directory, "*", "__init__.py")): - modules.append(self.define_module(ModuleType.DIRECTORY, - directory_module)) + for directory_module in glob.glob(os.path.join( + directory, "*", "__init__.py")): + modules.append(self.define_module(ModuleType.DIRECTORY, + directory_module)) return sorted(modules, key=lambda module: module.name) def define_module(self, type: ModuleType, filename: str @@ -127,23 +128,33 @@ class ModuleManager(object): def find_module(self, name: str) -> ModuleDefinition: type = ModuleType.FILE - path = self._module_path(name) + paths = self._module_paths(name) - if os.path.isdir(path): - type = ModuleType.DIRECTORY - path = os.path.join(path, "__init__.py") - else: - path = "%s.py" % path + path = None + for path in paths: + if os.path.isdir(path): + type = ModuleType.DIRECTORY + path = os.path.join(path, "__init__.py") + else: + possible_path = "%s.py" % path + if os.path.isfile(possible_path): + path = possible_path + + if path: + break - if not os.path.exists(path): + if not path: raise ModuleNotFoundException(name) return self.define_module(type, path) def _module_name(self, path: str) -> str: return os.path.basename(path).rsplit(".py", 1)[0].lower() - def _module_path(self, name: str) -> str: - return os.path.join(self.directory, name) + def _module_paths(self, name: str) -> str: + paths = [] + for directory in self.directories: + paths.append(os.path.join(directory, name)) + return paths def _import_name(self, name: str) -> str: return "bitbot_%s" % name |
