[PATCH 5/5] Update the API which controls where should spokes be displayed
Martin Sivak
msivak at redhat.com
Wed Dec 19 15:09:16 UTC 2012
This patch adds two pieces to Spoke classes:
should_run(environment_id, data)
This method should return True if the spoke is to be displayed
in the environment (currently only "anaconda" and "firstboot"
are supported)
@property configured()
This property should return list of strings that will be
stored to a config file, which will be passed to firstboot and
GIE and will control whether spokes are to be displayed again
or not.
---
pyanaconda/ui/common.py | 56 ++++++++++++++++++++++++++++--------
pyanaconda/ui/gui/hubs/__init__.py | 4 +++
pyanaconda/ui/gui/spokes/password.py | 7 ++---
pyanaconda/ui/tui/hubs/__init__.py | 4 +++
4 files changed, 54 insertions(+), 17 deletions(-)
diff --git a/pyanaconda/ui/common.py b/pyanaconda/ui/common.py
index 69d0390..f4e3d21 100644
--- a/pyanaconda/ui/common.py
+++ b/pyanaconda/ui/common.py
@@ -116,25 +116,37 @@ class UIObject(object):
return self._data
class FirstbootSpokeMixIn(object):
- """This MixIn class marks Spokes as usable for Firstboot."""
-
+ """This MixIn class marks Spokes as usable for Firstboot
+ and Anaconda.
+ """
@classmethod
- def configure_tag(cls):
- """This method defines textual id (or list of those) that will
- be written into the after-install customization status
- file for the firstboot and GIE to know that the spoke was
- configured in anaconda."""
- return None
+ def should_run(cls, environment, data):
+ """This method is responsible for beginning Spoke initialization
+ in the firstboot environment (even before __init__).
+ It should return True if the spoke is to be shown on the
+ FirstbootHub and False if it should be skipped.
+
+ It might be called multiple times, with or without (None)
+ the data argument.
+ """
+ return environment in ("anaconda", "firstboot")
+
+class FirstbootOnlySpokeMixIn(object):
+ """This MixIn class marks Spokes as usable for Firstboot."""
@classmethod
- def firstboot(cls):
+ def should_run(cls, environment, data):
"""This method is responsible for beginning Spoke initialization
in the firstboot environment (even before __init__).
It should return True if the spoke is to be shown on the
- FirstbootHub and False if it should be skipped."""
- return True
-
+ FirstbootHub and False if it should be skipped.
+
+ It might be called multiple times, with or without (None)
+ the data argument.
+ """
+ return environment in ("firstboot")
+
class Spoke(UIObject):
"""A Spoke is a single configuration screen. There are several different
places where a Spoke can be displayed, each of which will have its own
@@ -197,6 +209,18 @@ class Spoke(UIObject):
self.instclass = instclass
self.applyOnSkip = False
+ @classmethod
+ def should_run(cls, environment, data):
+ """This method is responsible for beginning Spoke initialization.
+
+ It should return True if the spoke is to be shown while in
+ <environment> and False if it should be skipped.
+
+ It might be called multiple times, with or without (None)
+ the data argument.
+ """
+ return environment in ("anaconda")
+
def apply(self):
"""Apply the selections made on this Spoke to the object's preset
data object. This method must be provided by every subclass.
@@ -204,6 +228,14 @@ class Spoke(UIObject):
raise NotImplementedError
@property
+ def configured(self):
+ """This method returns a list of textual ids that should
+ be written into the after-install customization status
+ file for the firstboot and GIE to know that the spoke was
+ configured and what value groups were provided."""
+ return ["%s.%s" % (self.__class__.__module__, self.__class__.__name__)]
+
+ @property
def completed(self):
"""Has this spoke been visited and completed? If not and the spoke is
mandatory, a special warning icon will be shown on the Hub beside the
diff --git a/pyanaconda/ui/gui/hubs/__init__.py b/pyanaconda/ui/gui/hubs/__init__.py
index 3975b37..1f5141a 100644
--- a/pyanaconda/ui/gui/hubs/__init__.py
+++ b/pyanaconda/ui/gui/hubs/__init__.py
@@ -147,6 +147,10 @@ class Hub(GUIObject, common.Hub):
selectors = []
for spokeClass in sorted(cats_and_spokes[c], key=lambda s: s.title):
+ # Check if this spoke is to be shown in anaconda
+ if not spokeClass.should_run("anaconda", self.data):
+ continue
+
# Create the new spoke and populate its UI with whatever data.
# From here on, this Spoke will always exist.
spoke = spokeClass(self.data, self.storage, self.payload, self.instclass)
diff --git a/pyanaconda/ui/gui/spokes/password.py b/pyanaconda/ui/gui/spokes/password.py
index 1bd424c..44be1ca 100644
--- a/pyanaconda/ui/gui/spokes/password.py
+++ b/pyanaconda/ui/gui/spokes/password.py
@@ -31,12 +31,13 @@ import string
from pyanaconda.ui.gui.spokes import NormalSpoke
from pyanaconda.ui.gui.categories.user_settings import UserSettingsCategory
+from pyanaconda.ui.common import FirstbootSpokeMixIn
#from _isys import isCapsLockEnabled
__all__ = ["PasswordSpoke"]
-class PasswordSpoke(NormalSpoke):
+class PasswordSpoke(FirstbootSpokeMixIn, NormalSpoke):
builderObjects = ["passwordWindow"]
mainWidgetName = "passwordWindow"
@@ -47,10 +48,6 @@ class PasswordSpoke(NormalSpoke):
icon = "dialog-password-symbolic"
title = N_("ROOT PASSWORD")
- @classmethod
- def firstboot(cls):
- return True
-
def __init__(self, *args):
NormalSpoke.__init__(self, *args)
self._password = None
diff --git a/pyanaconda/ui/tui/hubs/__init__.py b/pyanaconda/ui/tui/hubs/__init__.py
index d669bc7..7d16ff3 100644
--- a/pyanaconda/ui/tui/hubs/__init__.py
+++ b/pyanaconda/ui/tui/hubs/__init__.py
@@ -56,6 +56,10 @@ class TUIHub(TUIObject, common.Hub):
# sort them according to their priority
for s in sorted(spokes, key = lambda s: s.priority):
+ # Check if this spoke is to be shown in anaconda
+ if not s.should_run("anaconda", self.data):
+ continue
+
spoke = s(app, data, storage, payload, instclass)
spoke.initialize()
--
1.7.11.7
More information about the anaconda-patches
mailing list