[PATCH] Do not schedule hubs with no spokes available (#1006357)

Vratislav Podzimek vpodzime at redhat.com
Wed Sep 11 10:38:18 UTC 2013


If a hub doesn't have any spokes to show, it shouldn't be scheduled to be run in
the main loop.

Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
---
 pyanaconda/ui/tui/__init__.py        |  5 +++--
 pyanaconda/ui/tui/hubs/__init__.py   |  3 +++
 pyanaconda/ui/tui/hubs/summary.py    |  6 +++++-
 pyanaconda/ui/tui/simpleline/base.py | 13 +++++++++++--
 4 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/pyanaconda/ui/tui/__init__.py b/pyanaconda/ui/tui/__init__.py
index 299307e..31bcff5 100644
--- a/pyanaconda/ui/tui/__init__.py
+++ b/pyanaconda/ui/tui/__init__.py
@@ -166,9 +166,10 @@ class TextUserInterface(ui.UserInterface):
             if hasattr(obj, "set_path"):
                 obj.set_path("spokes", self.paths["spokes"])
 
-            obj.setup(self.ENVIRONMENT)
+            should_schedule = obj.setup(self.ENVIRONMENT)
 
-            self._app.schedule_screen(obj)
+            if should_schedule:
+                self._app.schedule_screen(obj)
 
     def run(self):
         """Run the interface.  This should do little more than just pass
diff --git a/pyanaconda/ui/tui/hubs/__init__.py b/pyanaconda/ui/tui/hubs/__init__.py
index 14e6957..e466b8c 100644
--- a/pyanaconda/ui/tui/hubs/__init__.py
+++ b/pyanaconda/ui/tui/hubs/__init__.py
@@ -75,6 +75,8 @@ class TUIHub(TUIObject, common.Hub):
                 self._keys[self._spoke_count] = spoke
                 self._spokes[spoke.__class__.__name__] = spoke
 
+        # only schedule the hub if it has some spokes
+        return self._spoke_count != 0
 
     def refresh(self, args = None):
         """This methods fills the self._window list by all the objects
@@ -97,6 +99,7 @@ class TUIHub(TUIObject, common.Hub):
     def input(self, args, key):
         """Handle user input. Numbers are used to show a spoke, the rest is passed
         to the higher level for processing."""
+
         try:
             number = int(key)
             self.app.switch_screen_with_return(self._keys[number])
diff --git a/pyanaconda/ui/tui/hubs/summary.py b/pyanaconda/ui/tui/hubs/summary.py
index 3f5f53e..0bc5911 100644
--- a/pyanaconda/ui/tui/hubs/summary.py
+++ b/pyanaconda/ui/tui/hubs/summary.py
@@ -32,7 +32,9 @@ class SummaryHub(TUIHub):
     categories = ["source", "localization", "destination", "password", "software", "network"]
 
     def setup(self, environment="anaconda"):
-        TUIHub.setup(self, environment=environment)
+        should_schedule = TUIHub.setup(self, environment=environment)
+        if not should_schedule:
+            return False
 
         if flags.automatedInstall:
             sys.stdout.write(_("Starting automated install"))
@@ -48,6 +50,8 @@ class SummaryHub(TUIHub):
                 if spoke.changed:
                     spoke.execute()
 
+        return True
+
     # override the prompt so that we can skip user input on kickstarts
     # where all the data is in hand.  If not in hand, do the actual prompt.
     def prompt(self, args=None):
diff --git a/pyanaconda/ui/tui/simpleline/base.py b/pyanaconda/ui/tui/simpleline/base.py
index b057e15..63d0ce9 100644
--- a/pyanaconda/ui/tui/simpleline/base.py
+++ b/pyanaconda/ui/tui/simpleline/base.py
@@ -505,8 +505,17 @@ class UIScreen(object):
         self._page = 0
 
     def setup(self, environment):
-        """Do additional setup right before this screen is used."""
-        pass
+        """
+        Do additional setup right before this screen is used.
+
+        :param environment: environment (see pyanaconda.constants) the UI is running in
+        :type environment: either FIRSTBOOT_ENVIRON or ANACONDA_ENVIRON
+        :return: whether this screen should be scheduled or not
+        :rtype: bool
+
+        """
+
+        return True
 
     def refresh(self, args = None):
         """Method which prepares the content desired on the screen to self._window.
-- 
1.7.11.7



More information about the anaconda-patches mailing list