From: Ed Bartosh Date: Wed, 15 Feb 2017 12:58:22 +0000 (+0200) Subject: wic: reimplement PluginMgr.get_plugin_methods X-Git-Tag: lucaceresoli/bug-15201-perf-libtraceevent-missing~22247 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=875d4eede61b548d64f426c2ef077cc17e50cd45;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git wic: reimplement PluginMgr.get_plugin_methods Simplified the implementation of get_plugin_methods: - get rid of looping over the dicrtionary, used access by key instead - get rid of filling a dictionary that passed as a parameter Signed-off-by: Ed Bartosh --- diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py index 4aba12de751..196896c1704 100644 --- a/scripts/lib/wic/help.py +++ b/scripts/lib/wic/help.py @@ -374,7 +374,7 @@ DESCRIPTION This scheme is extensible - adding more hooks is a simple matter of adding more plugin methods to SourcePlugin and derived classes. The code that then needs to call the plugin methods uses - plugin.get_source_plugin_methods() to find the method(s) needed by + plugin.get_plugin_methods() to find the method(s) needed by the call; this is done by filling up a dict with keys containing the method names of interest - on success, these will be filled in with the actual methods. Please see the implementation for diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py index d3cd5931f77..1f384be450a 100644 --- a/scripts/lib/wic/partition.py +++ b/scripts/lib/wic/partition.py @@ -170,14 +170,11 @@ class Partition(): splitted = self.sourceparams.split(',') srcparams_dict = dict(par.split('=') for par in splitted if par) - partition_methods = { - "do_stage_partition": None, - "do_prepare_partition": None, - "do_configure_partition": None - } - - methods = PluginMgr.get_source_plugin_methods(self.source, - partition_methods) + partition_methods = ["do_configure_partition", "do_stage_partition", + "do_prepare_partition"] + + methods = PluginMgr.get_plugin_methods('source', self.source, + partition_methods) methods["do_configure_partition"](self, srcparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, native_sysroot) diff --git a/scripts/lib/wic/plugin.py b/scripts/lib/wic/plugin.py index 064243dc9d0..c200822af74 100644 --- a/scripts/lib/wic/plugin.py +++ b/scripts/lib/wic/plugin.py @@ -109,22 +109,18 @@ class PluginMgr: return pluginbase.get_plugins(ptype) @classmethod - def get_source_plugin_methods(cls, source_name, methods): + def get_plugin_methods(cls, ptype, pname, methods): """ The methods param is a dict with the method names to find. On return, the dict values will be filled in with pointers to the corresponding methods. If one or more methods are not found, None is returned. """ - return_methods = None - for _source_name, klass in cls.get_plugins('source').items(): - if _source_name == source_name: - for _method_name in methods: - if not hasattr(klass, _method_name): - logger.warning("Unimplemented %s source interface for: %s", - _method_name, _source_name) - return None - func = getattr(klass, _method_name) - methods[_method_name] = func - return_methods = methods - return return_methods + result = {} + plugin = cls.get_plugins(ptype).get(pname) + for method in methods: + if not hasattr(plugin, method): + raise WicError("Unimplemented %s plugin interface for: %s" % + (method, pname)) + result[method] = getattr(plugin, method) + return result diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py index b93273e8776..4ab195519a0 100644 --- a/scripts/lib/wic/plugins/imager/direct.py +++ b/scripts/lib/wic/plugins/imager/direct.py @@ -198,11 +198,11 @@ class DirectPlugin(ImagerPlugin): disk_name = self.parts[0].disk if source_plugin: name = "do_install_disk" - methods = PluginMgr.get_source_plugin_methods(source_plugin, - {name: None}) - methods["do_install_disk"](self._image, disk_name, self, self.workdir, - self.oe_builddir, self.bootimg_dir, - self.kernel_dir, self.native_sysroot) + method = PluginMgr.get_plugin_methods('source', source_plugin, + [name])[name] + method(self._image, disk_name, self, self.workdir, + self.oe_builddir, self.bootimg_dir, + self.kernel_dir, self.native_sysroot) full_path = self._image.path # Generate .bmap