diff options
author | Ed Bartosh <ed.bartosh@linux.intel.com> | 2017-02-16 12:53:30 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-03-04 23:18:17 +0000 |
commit | c4b96817e5869e5381ec2e6a62bfdaf066559525 (patch) | |
tree | 56b34e6b1844068122a99d495da4c08d01320f2e /scripts | |
parent | 0c0ed61992c248a2427d0eb9905939e05c9de5b0 (diff) | |
download | poky-c4b96817e5869e5381ec2e6a62bfdaf066559525.tar.gz |
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 <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/lib/wic/pluginbase.py | 32 |
1 files changed, 15 insertions, 17 deletions
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" | |||
32 | 32 | ||
33 | logger = logging.getLogger('wic') | 33 | logger = logging.getLogger('wic') |
34 | 34 | ||
35 | PLUGINS = defaultdict(dict) | ||
36 | |||
35 | class PluginMgr: | 37 | class PluginMgr: |
36 | _plugin_dirs = [] | 38 | _plugin_dirs = [] |
37 | _plugins = {} | ||
38 | 39 | ||
39 | @classmethod | 40 | @classmethod |
40 | def get_plugins(cls, ptype): | 41 | def get_plugins(cls, ptype): |
@@ -42,9 +43,6 @@ class PluginMgr: | |||
42 | if ptype not in PLUGIN_TYPES: | 43 | if ptype not in PLUGIN_TYPES: |
43 | raise WicError('%s is not valid plugin type' % ptype) | 44 | raise WicError('%s is not valid plugin type' % ptype) |
44 | 45 | ||
45 | if ptype in cls._plugins: | ||
46 | return cls._plugins[ptype] | ||
47 | |||
48 | # collect plugin directories | 46 | # collect plugin directories |
49 | if not cls._plugin_dirs: | 47 | if not cls._plugin_dirs: |
50 | cls._plugin_dirs = [os.path.join(os.path.dirname(__file__), 'plugins')] | 48 | cls._plugin_dirs = [os.path.join(os.path.dirname(__file__), 'plugins')] |
@@ -55,25 +53,25 @@ class PluginMgr: | |||
55 | if path not in cls._plugin_dirs and os.path.isdir(path): | 53 | if path not in cls._plugin_dirs and os.path.isdir(path): |
56 | cls._plugin_dirs.insert(0, path) | 54 | cls._plugin_dirs.insert(0, path) |
57 | 55 | ||
58 | # load plugins | 56 | if ptype not in PLUGINS: |
59 | for pdir in cls._plugin_dirs: | 57 | # load all ptype plugins |
60 | ppath = os.path.join(pdir, ptype) | 58 | for pdir in cls._plugin_dirs: |
61 | if os.path.isdir(ppath): | 59 | ppath = os.path.join(pdir, ptype) |
62 | for fname in os.listdir(ppath): | 60 | if os.path.isdir(ppath): |
63 | if fname.endswith('.py'): | 61 | for fname in os.listdir(ppath): |
64 | mname = fname[:-3] | 62 | if fname.endswith('.py'): |
65 | mpath = os.path.join(ppath, fname) | 63 | mname = fname[:-3] |
66 | SourceFileLoader(mname, mpath).load_module() | 64 | mpath = os.path.join(ppath, fname) |
65 | logger.debug("loading plugin module %s", mpath) | ||
66 | SourceFileLoader(mname, mpath).load_module() | ||
67 | 67 | ||
68 | cls._plugins[ptype] = PluginMeta.plugins.get(ptype) | 68 | return PLUGINS.get(ptype) |
69 | return cls._plugins[ptype] | ||
70 | 69 | ||
71 | class PluginMeta(type): | 70 | class PluginMeta(type): |
72 | plugins = defaultdict(dict) | ||
73 | def __new__(cls, name, bases, attrs): | 71 | def __new__(cls, name, bases, attrs): |
74 | class_type = type.__new__(cls, name, bases, attrs) | 72 | class_type = type.__new__(cls, name, bases, attrs) |
75 | if 'name' in attrs: | 73 | if 'name' in attrs: |
76 | cls.plugins[class_type.wic_plugin_type][attrs['name']] = class_type | 74 | PLUGINS[class_type.wic_plugin_type][attrs['name']] = class_type |
77 | 75 | ||
78 | return class_type | 76 | return class_type |
79 | 77 | ||