From c4b96817e5869e5381ec2e6a62bfdaf066559525 Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Thu, 16 Feb 2017 12:53:30 +0200 Subject: wic: pluginbase: use global dictionary Made PluginMeta to populate global PLUGINS dictionary that is accessed by PluginMgr. This should make the code more understandable as PluginMgr don't need to get data directly from PlugnMeta attribute. (From OE-Core rev: 68df14eb43103537279824c5f627cc5914b5282c) Signed-off-by: Ed Bartosh Signed-off-by: Richard Purdie --- scripts/lib/wic/pluginbase.py | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) (limited to 'scripts') diff --git a/scripts/lib/wic/pluginbase.py b/scripts/lib/wic/pluginbase.py index 93f0b663a3..fb3d179c2d 100644 --- a/scripts/lib/wic/pluginbase.py +++ b/scripts/lib/wic/pluginbase.py @@ -32,9 +32,10 @@ SCRIPTS_PLUGIN_DIR = "scripts/lib/wic/plugins" logger = logging.getLogger('wic') +PLUGINS = defaultdict(dict) + class PluginMgr: _plugin_dirs = [] - _plugins = {} @classmethod def get_plugins(cls, ptype): @@ -42,9 +43,6 @@ class PluginMgr: if ptype not in PLUGIN_TYPES: raise WicError('%s is not valid plugin type' % ptype) - if ptype in cls._plugins: - return cls._plugins[ptype] - # collect plugin directories if not cls._plugin_dirs: cls._plugin_dirs = [os.path.join(os.path.dirname(__file__), 'plugins')] @@ -55,25 +53,25 @@ class PluginMgr: if path not in cls._plugin_dirs and os.path.isdir(path): cls._plugin_dirs.insert(0, path) - # load plugins - for pdir in cls._plugin_dirs: - ppath = os.path.join(pdir, ptype) - if os.path.isdir(ppath): - for fname in os.listdir(ppath): - if fname.endswith('.py'): - mname = fname[:-3] - mpath = os.path.join(ppath, fname) - SourceFileLoader(mname, mpath).load_module() + if ptype not in PLUGINS: + # load all ptype plugins + for pdir in cls._plugin_dirs: + ppath = os.path.join(pdir, ptype) + if os.path.isdir(ppath): + for fname in os.listdir(ppath): + if fname.endswith('.py'): + mname = fname[:-3] + mpath = os.path.join(ppath, fname) + logger.debug("loading plugin module %s", mpath) + SourceFileLoader(mname, mpath).load_module() - cls._plugins[ptype] = PluginMeta.plugins.get(ptype) - return cls._plugins[ptype] + return PLUGINS.get(ptype) class PluginMeta(type): - plugins = defaultdict(dict) def __new__(cls, name, bases, attrs): class_type = type.__new__(cls, name, bases, attrs) if 'name' in attrs: - cls.plugins[class_type.wic_plugin_type][attrs['name']] = class_type + PLUGINS[class_type.wic_plugin_type][attrs['name']] = class_type return class_type -- cgit v1.2.3-54-g00ecf