[master][PATCH] Move the Anaconda class to a proper module
Vratislav Podzimek
vpodzime at redhat.com
Tue Sep 10 12:41:09 UTC 2013
This prevents unittests, ipython sessions, etc. from importing a bunch of
modules when anything is imported from the pyanaconda package.
Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
---
anaconda | 2 +-
pyanaconda/__init__.py | 228 -------------------------------------------------
pyanaconda/anaconda.py | 228 +++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 229 insertions(+), 229 deletions(-)
create mode 100644 pyanaconda/anaconda.py
diff --git a/anaconda b/anaconda
index fd8e2fe..3e745e3 100755
--- a/anaconda
+++ b/anaconda
@@ -766,7 +766,7 @@ if __name__ == "__main__":
else:
print "anaconda %s (pre-release) started." % verdesc
- from pyanaconda import Anaconda
+ from pyanaconda.anaconda import Anaconda
anaconda = Anaconda()
iutil.setup_translations(gettext)
diff --git a/pyanaconda/__init__.py b/pyanaconda/__init__.py
index 5bc83e5..e69de29 100644
--- a/pyanaconda/__init__.py
+++ b/pyanaconda/__init__.py
@@ -1,228 +0,0 @@
-#!/usr/bin/python
-#
-# anaconda: The Red Hat Linux Installation program
-#
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-# 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): Brent Fox <bfox at redhat.com>
-# Mike Fulbright <msf at redhat.com>
-# Jakub Jelinek <jakub at redhat.com>
-# Jeremy Katz <katzj at redhat.com>
-# Chris Lumens <clumens at redhat.com>
-# Paul Nasrat <pnasrat at redhat.com>
-# Erik Troan <ewt at rpath.com>
-# Matt Wilson <msw at rpath.com>
-#
-
-import os, time
-import sys
-from constants import ROOT_PATH
-from tempfile import mkstemp
-
-from pyanaconda.bootloader import get_bootloader
-from pyanaconda import constants
-from pyanaconda import addons
-from pyanaconda.i18n import _
-
-import logging
-log = logging.getLogger("anaconda")
-stdoutLog = logging.getLogger("anaconda.stdout")
-
-class Anaconda(object):
- def __init__(self):
- import desktop
-
- self._bootloader = None
- self.canReIPL = False
- self.desktop = desktop.Desktop()
- self.dir = None
- self.displayMode = None
- self.extraModules = []
- self.id = None
- self._instClass = None
- self._intf = None
- self.isHeadless = False
- self.ksdata = None
- self.mediaDevice = None
- self.methodstr = None
- self.opts = None
- self._payload = None
- self.proxy = None
- self.proxyUsername = None
- self.proxyPassword = None
- self.reIPLMessage = None
- self.rescue = False
- self.rescue_mount = True
- self.rootParts = None
-
- self.stage2 = None
- self._storage = None
- self.updateSrc = None
- self.mehConfig = None
-
- # *sigh* we still need to be able to write this out
- self.xdriver = None
-
- @property
- def bootloader(self):
- if not self._bootloader:
- self._bootloader = get_bootloader()
-
- return self._bootloader
-
- @property
- def instClass(self):
- if not self._instClass:
- from installclass import DefaultInstall
- self._instClass = DefaultInstall()
-
- return self._instClass
-
- def _getInterface(self):
- return self._intf
-
- def _setInterface(self, v):
- # "lambda cannot contain assignment"
- self._intf = v
-
- def _delInterface(self):
- del self._intf
-
- intf = property(_getInterface, _setInterface, _delInterface)
-
- @property
- def payload(self):
- # Try to find the packaging payload class. First try the install
- # class. If it doesn't give us one, fall back to the default.
- if not self._payload:
- klass = self.instClass.getBackend()
-
- if not klass:
- from flags import flags
-
- if flags.livecdInstall:
- from pyanaconda.packaging.livepayload import LiveImagePayload
- klass = LiveImagePayload
- elif self.ksdata.method.method == "liveimg":
- from pyanaconda.packaging.livepayload import LiveImageKSPayload
- klass = LiveImageKSPayload
- elif flags.dnf:
- from pyanaconda.packaging.dnfpayload import DNFPayload as klass
- else:
- from pyanaconda.packaging.yumpayload import YumPayload
- klass = YumPayload
-
- self._payload = klass(self.ksdata)
-
- return self._payload
-
- @property
- def protected(self):
- import stat
- specs = []
- if os.path.exists("/run/initramfs/livedev") and \
- stat.S_ISBLK(os.stat("/run/initramfs/livedev")[stat.ST_MODE]):
- specs.append(os.readlink("/run/initramfs/livedev"))
-
- if self.methodstr and self.methodstr.startswith("hd:"):
- specs.append(self.methodstr[3:].split(":", 3)[0])
-
- if self.stage2 and self.stage2.startswith("hd:"):
- specs.append(self.stage2[3:].split(":", 3)[0])
-
- return specs
-
- @property
- def storage(self):
- if not self._storage:
- import blivet
- self._storage = blivet.Blivet(ksdata=self.ksdata)
-
- if self.instClass.defaultFS:
- self._storage.setDefaultFSType(self.instClass.defaultFS)
-
- return self._storage
-
- def dumpState(self):
- from meh import ExceptionInfo
- from meh.dump import ReverseExceptionDump
- from inspect import stack as _stack
- from traceback import format_stack
-
- # Skip the frames for dumpState and the signal handler.
- stack = _stack()[2:]
- stack.reverse()
- exn = ReverseExceptionDump(ExceptionInfo(None, None, stack),
- self.mehConfig)
-
- # gather up info on the running threads
- threads = "\nThreads\n-------\n"
- for thread_id, frame in sys._current_frames().iteritems():
- threads += "\nThread %s\n" % (thread_id,)
- threads += "".join(format_stack(frame))
-
- # dump to a unique file
- (fd, filename) = mkstemp(prefix="anaconda-tb-", dir="/tmp")
- dump_text = exn.traceback_and_object_dump(self)
- dump_text += threads
- dump_text = dump_text.encode("utf-8")
- os.write(fd, dump_text)
- os.close(fd)
-
- # append to a given file
- with open("/tmp/anaconda-tb-all.log", "a+") as f:
- f.write("--- traceback: %s ---\n" % filename)
- f.write(dump_text + "\n")
-
- def initInterface(self, addon_paths=None):
- if self._intf:
- raise RuntimeError("Second attempt to initialize the InstallInterface")
-
- if self.displayMode == 'g':
- from pyanaconda.ui.gui import GraphicalUserInterface
- self._intf = GraphicalUserInterface(self.storage, self.payload,
- self.instClass)
-
- # needs to be refreshed now we know if gui or tui will take place
- addon_paths = addons.collect_addon_paths(constants.ADDON_PATHS,
- ui_subdir="gui")
- elif self.displayMode in ['t', 'c']: # text and command line are the same
- from pyanaconda.ui.tui import TextUserInterface
- self._intf = TextUserInterface(self.storage, self.payload,
- self.instClass)
-
- # needs to be refreshed now we know if gui or tui will take place
- addon_paths = addons.collect_addon_paths(constants.ADDON_PATHS,
- ui_subdir="tui")
- else:
- raise RuntimeError("Unsupported displayMode: %s" % self.displayMode)
-
- if addon_paths:
- self._intf.update_paths(addon_paths)
-
- def writeXdriver(self, root = None):
- # this should go away at some point, but until it does, we
- # need to keep it around.
- if self.xdriver is None:
- return
- if root is None:
- root = ROOT_PATH
- if not os.path.isdir("%s/etc/X11" %(root,)):
- os.makedirs("%s/etc/X11" %(root,), mode=0755)
- f = open("%s/etc/X11/xorg.conf" %(root,), 'w')
- f.write('Section "Device"\n\tIdentifier "Videocard0"\n\tDriver "%s"\nEndSection\n' % self.xdriver)
- f.close()
diff --git a/pyanaconda/anaconda.py b/pyanaconda/anaconda.py
new file mode 100644
index 0000000..5bc83e5
--- /dev/null
+++ b/pyanaconda/anaconda.py
@@ -0,0 +1,228 @@
+#!/usr/bin/python
+#
+# anaconda: The Red Hat Linux Installation program
+#
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+# 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): Brent Fox <bfox at redhat.com>
+# Mike Fulbright <msf at redhat.com>
+# Jakub Jelinek <jakub at redhat.com>
+# Jeremy Katz <katzj at redhat.com>
+# Chris Lumens <clumens at redhat.com>
+# Paul Nasrat <pnasrat at redhat.com>
+# Erik Troan <ewt at rpath.com>
+# Matt Wilson <msw at rpath.com>
+#
+
+import os, time
+import sys
+from constants import ROOT_PATH
+from tempfile import mkstemp
+
+from pyanaconda.bootloader import get_bootloader
+from pyanaconda import constants
+from pyanaconda import addons
+from pyanaconda.i18n import _
+
+import logging
+log = logging.getLogger("anaconda")
+stdoutLog = logging.getLogger("anaconda.stdout")
+
+class Anaconda(object):
+ def __init__(self):
+ import desktop
+
+ self._bootloader = None
+ self.canReIPL = False
+ self.desktop = desktop.Desktop()
+ self.dir = None
+ self.displayMode = None
+ self.extraModules = []
+ self.id = None
+ self._instClass = None
+ self._intf = None
+ self.isHeadless = False
+ self.ksdata = None
+ self.mediaDevice = None
+ self.methodstr = None
+ self.opts = None
+ self._payload = None
+ self.proxy = None
+ self.proxyUsername = None
+ self.proxyPassword = None
+ self.reIPLMessage = None
+ self.rescue = False
+ self.rescue_mount = True
+ self.rootParts = None
+
+ self.stage2 = None
+ self._storage = None
+ self.updateSrc = None
+ self.mehConfig = None
+
+ # *sigh* we still need to be able to write this out
+ self.xdriver = None
+
+ @property
+ def bootloader(self):
+ if not self._bootloader:
+ self._bootloader = get_bootloader()
+
+ return self._bootloader
+
+ @property
+ def instClass(self):
+ if not self._instClass:
+ from installclass import DefaultInstall
+ self._instClass = DefaultInstall()
+
+ return self._instClass
+
+ def _getInterface(self):
+ return self._intf
+
+ def _setInterface(self, v):
+ # "lambda cannot contain assignment"
+ self._intf = v
+
+ def _delInterface(self):
+ del self._intf
+
+ intf = property(_getInterface, _setInterface, _delInterface)
+
+ @property
+ def payload(self):
+ # Try to find the packaging payload class. First try the install
+ # class. If it doesn't give us one, fall back to the default.
+ if not self._payload:
+ klass = self.instClass.getBackend()
+
+ if not klass:
+ from flags import flags
+
+ if flags.livecdInstall:
+ from pyanaconda.packaging.livepayload import LiveImagePayload
+ klass = LiveImagePayload
+ elif self.ksdata.method.method == "liveimg":
+ from pyanaconda.packaging.livepayload import LiveImageKSPayload
+ klass = LiveImageKSPayload
+ elif flags.dnf:
+ from pyanaconda.packaging.dnfpayload import DNFPayload as klass
+ else:
+ from pyanaconda.packaging.yumpayload import YumPayload
+ klass = YumPayload
+
+ self._payload = klass(self.ksdata)
+
+ return self._payload
+
+ @property
+ def protected(self):
+ import stat
+ specs = []
+ if os.path.exists("/run/initramfs/livedev") and \
+ stat.S_ISBLK(os.stat("/run/initramfs/livedev")[stat.ST_MODE]):
+ specs.append(os.readlink("/run/initramfs/livedev"))
+
+ if self.methodstr and self.methodstr.startswith("hd:"):
+ specs.append(self.methodstr[3:].split(":", 3)[0])
+
+ if self.stage2 and self.stage2.startswith("hd:"):
+ specs.append(self.stage2[3:].split(":", 3)[0])
+
+ return specs
+
+ @property
+ def storage(self):
+ if not self._storage:
+ import blivet
+ self._storage = blivet.Blivet(ksdata=self.ksdata)
+
+ if self.instClass.defaultFS:
+ self._storage.setDefaultFSType(self.instClass.defaultFS)
+
+ return self._storage
+
+ def dumpState(self):
+ from meh import ExceptionInfo
+ from meh.dump import ReverseExceptionDump
+ from inspect import stack as _stack
+ from traceback import format_stack
+
+ # Skip the frames for dumpState and the signal handler.
+ stack = _stack()[2:]
+ stack.reverse()
+ exn = ReverseExceptionDump(ExceptionInfo(None, None, stack),
+ self.mehConfig)
+
+ # gather up info on the running threads
+ threads = "\nThreads\n-------\n"
+ for thread_id, frame in sys._current_frames().iteritems():
+ threads += "\nThread %s\n" % (thread_id,)
+ threads += "".join(format_stack(frame))
+
+ # dump to a unique file
+ (fd, filename) = mkstemp(prefix="anaconda-tb-", dir="/tmp")
+ dump_text = exn.traceback_and_object_dump(self)
+ dump_text += threads
+ dump_text = dump_text.encode("utf-8")
+ os.write(fd, dump_text)
+ os.close(fd)
+
+ # append to a given file
+ with open("/tmp/anaconda-tb-all.log", "a+") as f:
+ f.write("--- traceback: %s ---\n" % filename)
+ f.write(dump_text + "\n")
+
+ def initInterface(self, addon_paths=None):
+ if self._intf:
+ raise RuntimeError("Second attempt to initialize the InstallInterface")
+
+ if self.displayMode == 'g':
+ from pyanaconda.ui.gui import GraphicalUserInterface
+ self._intf = GraphicalUserInterface(self.storage, self.payload,
+ self.instClass)
+
+ # needs to be refreshed now we know if gui or tui will take place
+ addon_paths = addons.collect_addon_paths(constants.ADDON_PATHS,
+ ui_subdir="gui")
+ elif self.displayMode in ['t', 'c']: # text and command line are the same
+ from pyanaconda.ui.tui import TextUserInterface
+ self._intf = TextUserInterface(self.storage, self.payload,
+ self.instClass)
+
+ # needs to be refreshed now we know if gui or tui will take place
+ addon_paths = addons.collect_addon_paths(constants.ADDON_PATHS,
+ ui_subdir="tui")
+ else:
+ raise RuntimeError("Unsupported displayMode: %s" % self.displayMode)
+
+ if addon_paths:
+ self._intf.update_paths(addon_paths)
+
+ def writeXdriver(self, root = None):
+ # this should go away at some point, but until it does, we
+ # need to keep it around.
+ if self.xdriver is None:
+ return
+ if root is None:
+ root = ROOT_PATH
+ if not os.path.isdir("%s/etc/X11" %(root,)):
+ os.makedirs("%s/etc/X11" %(root,), mode=0755)
+ f = open("%s/etc/X11/xorg.conf" %(root,), 'w')
+ f.write('Section "Device"\n\tIdentifier "Videocard0"\n\tDriver "%s"\nEndSection\n' % self.xdriver)
+ f.close()
--
1.7.11.7
More information about the anaconda-patches
mailing list