summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2018-09-02 17:49:00 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2018-09-02 18:36:49 +0900
commit16462e9cd2007ae9e90fd94a7af5ba4c142cf83e (patch)
tree93c8eb07ff9e4689aa6b9acf63fc56f9c9ba75ab
parent43ad22d7509acba0fde011798a2271da7ad72215 (diff)
downloadbuildstream-16462e9cd2007ae9e90fd94a7af5ba4c142cf83e.tar.gz
plugin.py: Added _configure() and _get_configuring() private APIs
Keeps track of whether the plugin is currently being configured. Adjusted Element and Source classes to call _configure() in place of calling configure() directly. This is a part of #620
-rw-r--r--buildstream/element.py2
-rw-r--r--buildstream/plugin.py27
-rw-r--r--buildstream/source.py2
3 files changed, 29 insertions, 2 deletions
diff --git a/buildstream/element.py b/buildstream/element.py
index 0bc35ce38..ae8e10144 100644
--- a/buildstream/element.py
+++ b/buildstream/element.py
@@ -245,7 +245,7 @@ class Element(Plugin):
# Collect the composited element configuration and
# ask the element to configure itself.
self.__config = self.__extract_config(meta)
- self.configure(self.__config)
+ self._configure(self.__config)
# Extract Sandbox config
self.__sandbox_config = self.__extract_sandbox_config(meta)
diff --git a/buildstream/plugin.py b/buildstream/plugin.py
index a65db4d42..d8cca2751 100644
--- a/buildstream/plugin.py
+++ b/buildstream/plugin.py
@@ -179,6 +179,7 @@ class Plugin():
self.__provenance = provenance # The Provenance information
self.__type_tag = type_tag # The type of plugin (element or source)
self.__unique_id = _plugin_register(self) # Unique ID
+ self.__configuring = False # Whether we are currently configuring
# Infer the kind identifier
modulename = type(self).__module__
@@ -682,7 +683,32 @@ class Plugin():
else:
yield log
+ # _configure():
+ #
+ # Calls configure() for the plugin, this must be called by
+ # the core instead of configure() directly, so that the
+ # _get_configuring() state is up to date.
+ #
+ # Args:
+ # node (dict): The loaded configuration dictionary
+ #
+ def _configure(self, node):
+ self.__configuring = True
+ self.configure(node)
+ self.__configuring = False
+
+ # _get_configuring():
+ #
+ # Checks whether the plugin is in the middle of having
+ # its Plugin.configure() method called
+ #
+ # Returns:
+ # (bool): Whether we are currently configuring
+ def _get_configuring(self):
+ return self.__configuring
+
# _preflight():
+ #
# Calls preflight() for the plugin, and allows generic preflight
# checks to be added
#
@@ -690,6 +716,7 @@ class Plugin():
# SourceError: If it's a Source implementation
# ElementError: If it's an Element implementation
# ProgramNotFoundError: If a required host tool is not found
+ #
def _preflight(self):
self.preflight()
diff --git a/buildstream/source.py b/buildstream/source.py
index 15f9c43d5..412970ae4 100644
--- a/buildstream/source.py
+++ b/buildstream/source.py
@@ -308,7 +308,7 @@ class Source(Plugin):
self.__config = self.__extract_config(meta)
self.__first_pass = meta.first_pass
- self.configure(self.__config)
+ self._configure(self.__config)
COMMON_CONFIG_KEYS = ['kind', 'directory']
"""Common source config keys