From eeb4c284fb71dd62eaf5ee7017e23b64c2c899d7 Mon Sep 17 00:00:00 2001 From: Casey Rodarmor Date: Sat, 16 Jan 2016 19:00:15 -0800 Subject: Add plugin loader --- dotbot/util/module.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 dotbot/util/module.py (limited to 'dotbot/util') diff --git a/dotbot/util/module.py b/dotbot/util/module.py new file mode 100644 index 0000000..af6b0ed --- /dev/null +++ b/dotbot/util/module.py @@ -0,0 +1,29 @@ +import sys, os.path + +# We keep references to loaded modules so they don't get garbage collected. +loaded_modules = [] + +def load(path): + basename = os.path.basename(path) + module_name, extension = os.path.splitext(basename) + plugin = load_module(module_name, path) + loaded_modules.append(plugin) + +if sys.version_info >= (3, 5): + import importlib.util + + def load_module(module_name, path): + spec = importlib.util.spec_from_file_location(module_name, path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module +elif sys.version_info >= (3, 3): + from importlib.machinery import SourceFileLoader + + def load_module(module_name, path): + return SourceFileLoader(module_name, path).load_module() +else: + import imp + + def load_module(module_name, path): + return imp.load_source(module_name, path) -- cgit v1.2.3