[PATCH 2/6] Add a script interface that raises errors

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux