Instead of falling into an infinite loop like cmdline raise an error with a useful description of the problem. --- pyanaconda/script.py | 195 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 195 insertions(+), 0 deletions(-) create mode 100644 pyanaconda/script.py diff --git a/pyanaconda/script.py b/pyanaconda/script.py new file mode 100644 index 0000000..0394f0a --- /dev/null +++ b/pyanaconda/script.py @@ -0,0 +1,195 @@ +# +# script.py - non-interactive, script based anaconda interface +# +# Copyright (C) 2011 +# Red Hat, Inc. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Author(s): Brian C. Lane <bcl@xxxxxxxxxx> +# + +import time +import signal +import parted +from constants import * +from flags import flags +from iutil import strip_markup +from installinterfacebase import InstallInterfaceBase + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +import logging +log = logging.getLogger("anaconda") + +stepToClasses = { "install" : "setupProgressDisplay", + "complete": "Finished" } + +class WaitWindow: + def pop(self): + pass + def refresh(self): + pass + def __init__(self, title, text): + print(text) + +class ProgressWindow: + def pop(self): + print("") + + def pulse(self): + pass + + def set(self, amount): + if amount == self.total: + print(_("Completed")) + + def refresh(self): + pass + + def __init__(self, title, text, total, updpct = 0.05, pulse = False): + self.total = total + print(text) + print(_("In progress")) + +class InstallInterface(InstallInterfaceBase): + def __init__(self): + InstallInterfaceBase.__init__(self) + signal.signal(signal.SIGTSTP, signal.SIG_DFL) + self.instProgress = None + + def __del__(self): + pass + + def reinitializeWindow(self, title, path, size, description): + raise RuntimeError, ("Script mode requires all choices to be " + "specified in a kickstart configuration file.") + + def shutdown(self): + pass + + def suspend(self): + pass + + def resume(self): + pass + + def progressWindow(self, title, text, total, updpct = 0.05, pulse = False): + return ProgressWindow(title, text, total, updpct, pulse) + + def kickstartErrorWindow(self, text): + raise RuntimeError, ("The following error was found while parsing the " + "kickstart configuration file:\n\n%s" %(text,)) + + def messageWindow(self, title, text, type="ok", default = None, + custom_icon = None, custom_buttons = []): + if type == "ok": + print(text) + else: + print(title) + print(text) + print(type, custom_buttons) + raise RuntimeError, ("Script mode requires all choices to be specified in a kickstart configuration file.") + + def detailedMessageWindow(self, title, text, longText=None, type="ok", + default=None, custom_buttons=None, + custom_icon=None, expanded=False): + if longText: + text += "\n\n%s" % longText + + self.messageWindow(title, text, type=type, default=default, + custom_buttons=custom_buttons, custom_icon=custom_icon) + + def passphraseEntryWindow(self, device): + print("(passphraseEntryWindow: '%s')" % device) + raise RuntimeErrorm, ("Can't have a question in script mode!") + + def getLUKSPassphrase(self, passphrase = "", isglobal = False): + print("(getLUKSPassphrase)") + raise RuntimeError, ("Can't have a question in script mode!") + + def enableNetwork(self): + # Assume we want networking + return True + + def questionInitializeDASD(self, c, devs): + print("questionInitializeDASD") + raise RuntimeError, ("Can't have a question in script mode!") + + def mainExceptionWindow(self, shortText, longTextFile): + print(shortText) + + def waitWindow(self, title, text): + return WaitWindow(title, text) + + def beep(self): + pass + + def run(self, anaconda): + self.anaconda = anaconda + self.anaconda.dispatch.dispatch() + + def display_step(self, step): + if stepToClasses.has_key(step): + s = "nextWin = %s" %(stepToClasses[step],) + exec s + nextWin(self.anaconda) + else: + raise RuntimeError, ("In interactive step %s, can't continue" % (step,)) + + def setInstallProgressClass(self, c): + self.instProgress = c + + def setSteps(self, anaconda): + pass + +class progressDisplay: + def __init__(self): + self.pct = 0 + self.display = "" + + def __del__(self): + pass + + def processEvents(self): + pass + def setShowPercentage(self, val): + pass + def get_fraction(self): + return self.pct + def set_fraction(self, pct): + self.pct = pct + def set_text(self, txt): + print(txt) + def set_label(self, txt): + stripped = strip_markup(txt) + if stripped != self.display: + self.display = stripped + print(self.display) + +def setupProgressDisplay(anaconda): + if anaconda.dir == DISPATCH_BACK: + anaconda.intf.setInstallProgressClass(None) + return DISPATCH_BACK + else: + anaconda.intf.setInstallProgressClass(progressDisplay()) + + return DISPATCH_FORWARD + +def Finished(anaconda): + """ Install is finished. Lets just exit. + """ + return 0 + -- 1.7.4.4 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list