From 93b3eb37ff623f84b5b9c843353d3e2b406687ad Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Wed, 15 Feb 2017 20:42:30 +0200 Subject: wic: plugin: cache results in get_plugins Store results of PluginMgr.get_plugins to avoid loading plugins more than once. This should speed up finding plugins. (From OE-Core rev: 95ba37b394d01a6ed81f32ffa03813a070d682dc) Signed-off-by: Ed Bartosh Signed-off-by: Richard Purdie --- scripts/lib/wic/plugin.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/scripts/lib/wic/plugin.py b/scripts/lib/wic/plugin.py index 36a120bb1c..094a878e0f 100644 --- a/scripts/lib/wic/plugin.py +++ b/scripts/lib/wic/plugin.py @@ -31,7 +31,7 @@ logger = logging.getLogger('wic') class PluginMgr: _plugin_dirs = [] - _loaded = [] + _plugins = {} @classmethod def get_plugins(cls, ptype): @@ -39,6 +39,9 @@ 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')] @@ -52,13 +55,12 @@ class PluginMgr: # load plugins for pdir in cls._plugin_dirs: ppath = os.path.join(pdir, ptype) - if ppath not in cls._loaded: - 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() - cls._loaded.append(ppath) + 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() - return pluginbase.get_plugins(ptype) + cls._plugins[ptype] = pluginbase.get_plugins(ptype) + return cls._plugins[ptype] -- cgit v1.2.3-54-g00ecf