1
0
Fork 0
mirror of synced 2024-06-02 15:31:09 -04:00
dotbot/dotbot/util/module.py

46 lines
1.2 KiB
Python
Raw Normal View History

import os
import sys
from dotbot.plugin import Plugin
2016-01-16 22:00:15 -05:00
# We keep references to loaded modules so they don't get garbage collected.
loaded_modules = []
2022-01-30 18:48:30 -05:00
2016-01-16 22:00:15 -05:00
def load(path):
2022-01-30 18:48:30 -05:00
basename = os.path.basename(path)
module_name, extension = os.path.splitext(basename)
loaded_module = load_module(module_name, path)
plugins = []
for name in dir(loaded_module):
possible_plugin = getattr(loaded_module, name)
try:
if issubclass(possible_plugin, Plugin) and possible_plugin is not Plugin:
plugins.append(possible_plugin)
except TypeError:
pass
loaded_modules.append(loaded_module)
return plugins
2022-01-30 18:48:30 -05:00
2016-01-16 22:00:15 -05:00
if sys.version_info >= (3, 5):
2022-01-30 18:48:30 -05:00
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
2016-01-16 22:00:15 -05:00
elif sys.version_info >= (3, 3):
2022-01-30 18:48:30 -05:00
from importlib.machinery import SourceFileLoader
def load_module(module_name, path):
return SourceFileLoader(module_name, path).load_module()
2016-01-16 22:00:15 -05:00
else:
2022-01-30 18:48:30 -05:00
import imp
2016-01-16 22:00:15 -05:00
2022-01-30 18:48:30 -05:00
def load_module(module_name, path):
return imp.load_source(module_name, path)