--- pyanaconda/ui/__init__.py | 29 ++++++----------------------- pyanaconda/ui/common.py | 7 ++++++- pyanaconda/ui/gui/__init__.py | 22 ++++++++++------------ pyanaconda/ui/gui/spokes/password.py | 4 ++++ pyanaconda/ui/tui/__init__.py | 11 ++++++++--- 5 files changed, 34 insertions(+), 39 deletions(-)
diff --git a/pyanaconda/ui/__init__.py b/pyanaconda/ui/__init__.py index 26e540a..3f39a7a 100644 --- a/pyanaconda/ui/__init__.py +++ b/pyanaconda/ui/__init__.py @@ -22,8 +22,7 @@ __all__ = ["UserInterface"]
import os -import inspect -from common import collect +from .common import collect, PathDict
class UserInterface(object): """This is the base class for all kinds of install UIs. It primarily @@ -60,27 +59,11 @@ class UserInterface(object): from pyanaconda.errors import errorHandler errorHandler.ui = self
- @property - def basepath(self): - """returns the directory name for UI subtree""" - return os.path.dirname(inspect.getfile(self.__class__)) - - @property - def basemask(self): - """returns the python module name for basepath directory""" - return "pyanaconda.ui" - - @property - def paths(self): - """return dictionary mapping plugin elements (spokes, hubs, categories) - to a list of tuples (module mask, search path)""" - return { - "spokes": [(self.basemask + ".spokes.%s", - os.path.join(self.basepath, "spokes"))], - "hubs": [(self.basemask + ".hubs.%s", - os.path.join(self.basepath, "hubs"))] - } - + + basepath = os.path.dirname(__file__) + basemask = "pyanaconda.ui" + paths = PathDict({}) + def setup(self, data): """Construct all the objects required to implement this interface. This method must be provided by all subclasses. diff --git a/pyanaconda/ui/common.py b/pyanaconda/ui/common.py index af1e5f9..b1a8dd3 100644 --- a/pyanaconda/ui/common.py +++ b/pyanaconda/ui/common.py @@ -29,7 +29,12 @@ class PathDict(dict): """Dictionary class supporting + operator""" def __add__(self, ext): new_dict = copy.copy(self) - new_dict.update(ext) + for key, value in ext.iteritems(): + try: + new_dict[key].extend(value) + except KeyError: + new_dict[key] = value[:] + return new_dict
class UIObject(object): diff --git a/pyanaconda/ui/gui/__init__.py b/pyanaconda/ui/gui/__init__.py index 0af036d..2056307 100644 --- a/pyanaconda/ui/gui/__init__.py +++ b/pyanaconda/ui/gui/__init__.py @@ -247,9 +247,16 @@ class GraphicalUserInterface(UserInterface): # requires elementrs with 3rd party libraries from gi.repository import AnacondaWidgets
- @property - def basemask(self): - return "pyanaconda.ui.gui" + basemask = "pyanaconda.ui.gui" + basepath = os.path.dirname(__file__) + paths = UserInterface.paths + { + "categories": [(basemask + ".categories.%s", + os.path.join(basepath, "categories"))], + "spokes": [(basemask + ".spokes.%s", + os.path.join(basepath, "spokes"))], + "hubs": [(basemask + ".hubs.%s", + os.path.join(basepath, "hubs"))] + }
def _list_hubs(self): """Return a list of Hub classes to be imported to this interface""" @@ -280,15 +287,6 @@ class GraphicalUserInterface(UserInterface): # Second, order them according to their relationship return self._orderActionClasses(standalones, hubs)
- @property - def paths(self): - _paths = UserInterface.paths.fget(self) - _paths.update({"categories": [(self.basemask + ".categories.%s", - os.path.join(self.basepath, "categories"))] - }) - return _paths - - def _instantiateAction(self, actionClass): from spokes import StandaloneSpoke
diff --git a/pyanaconda/ui/gui/spokes/password.py b/pyanaconda/ui/gui/spokes/password.py index c273846..1bd424c 100644 --- a/pyanaconda/ui/gui/spokes/password.py +++ b/pyanaconda/ui/gui/spokes/password.py @@ -47,6 +47,10 @@ 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/__init__.py b/pyanaconda/ui/tui/__init__.py index cccbf70..b715d0a 100644 --- a/pyanaconda/ui/tui/__init__.py +++ b/pyanaconda/ui/tui/__init__.py @@ -129,9 +129,14 @@ class TextUserInterface(ui.UserInterface): ui.UserInterface.__init__(self, storage, payload, instclass) self._app = None
- @property - def basemask(self): - return "pyanaconda.ui.tui" + basemask = "pyanaconda.ui.tui" + basepath = os.path.dirname(__file__) + paths = ui.UserInterface.paths + { + "spokes": [(basemask + ".spokes.%s", + os.path.join(basepath, "spokes"))], + "hubs": [(basemask + ".hubs.%s", + os.path.join(basepath, "hubs"))] + }
def _list_hubs(self): """returns the list of hubs to use"""