summaryrefslogtreecommitdiffstats
path: root/pyanaconda/ui/gui/tools/run-spoke.py
blob: 92173e747a9081999044ea3a14959a3962ce8899 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/python

import sys, os

import gi.overrides

# We need this so we can tell GI to look for overrides objects
# also in anaconda source directories
for p in os.environ.get("ANACONDA_WIDGETS_OVERRIDES", "").split(":"):
    gi.overrides.__path__.insert(0, p)

from gi.repository import AnacondaWidgets, Gtk

import ctypes
import os.path

# Check command line arguments
if len(sys.argv)<2:
    print "Usage: $0 <spoke module name> [<spoke widget class>]"
    sys.exit(1)

# This is a hack to make sure the AnacondaWidgets library gets loaded
ctypes.CDLL("libAnacondaWidgets.so.0", ctypes.RTLD_GLOBAL)

# Logging always needs to be set up first thing, or there'll be tracebacks.
from pyanaconda import anaconda_log
anaconda_log.init()

from pyanaconda.installclass import DefaultInstall
from pyanaconda.storage import Storage
from pyanaconda.threads import initThreading
from pyanaconda.packaging.yumpayload import YumPayload
from pykickstart.version import makeVersion

# Don't worry with fcoe, iscsi, dasd, any of that crud.
from pyanaconda.flags import flags
flags.imageInstall = True
flags.testing = True

initThreading()

# Figure out the part we are about to show: hub/spoke?
# And get the name of the module which represents it
if os.path.basename(sys.argv[0]) == "run-spoke.py":
    spokeModuleName = "pyanaconda.ui.gui.spokes.%s" % sys.argv[1]
    from pyanaconda.ui.common import Spoke
    spokeBaseClass = Spoke
    spokeText = "spoke"
    SpokeText = "Spoke"
elif os.path.basename(sys.argv[0]) == "run-hub.py":
    spokeModuleName = "pyanaconda.ui.gui.hubs.%s" % sys.argv[1]
    from pyanaconda.ui.common import Hub
    spokeBaseClass = Hub
    spokeText = "hub"
    SpokeText = "Hub"
else:
    print "You have to run this command as run-spoke.py or run-hub.py."
    sys.exit(1)

# Set default spoke class
spokeClass = None

# Load spoke specified on the command line
# If the spoke module was specified, but the spoke class was not,
# try to find it using class hierarchy
try:
    spokeClassName = sys.argv[2]
    __import__(spokeModuleName, fromlist = [spokeClassName])
    spokeModule = sys.modules[spokeModuleName]
except IndexError:
    __import__(spokeModuleName)
    spokeModule = sys.modules[spokeModuleName]
    for k,v in vars(spokeModule).iteritems():
        try:
            if issubclass(v, spokeBaseClass) and v != spokeBaseClass:
                spokeClassName = k
                spokeClass = v
        except TypeError:
            pass

if not spokeClass:
    try:
        spokeClass = getattr(spokeModule, spokeClassName)
    except KeyError:
        print "%s %s could not be found in %s" % (SpokeText, spokeClassName, spokeModuleName)
        sys.exit(1)


print "Running %s %s from %s" % (spokeText, spokeClass, spokeModule)

ksdata = makeVersion()
storage = Storage(data=ksdata)
storage.reset()
instclass = DefaultInstall()

payload = YumPayload(ksdata)
payload.setup(storage)

spoke = spokeClass(ksdata, storage, payload, instclass)
if hasattr(spoke, "register_event_cb"):
    spoke.register_event_cb("continue", lambda: Gtk.main_quit())
    spoke.register_event_cb("quit", lambda: Gtk.main_quit())

if hasattr(spoke, "set_path"):
    spoke.set_path("categories", [
        ("pyanaconda.ui.gui.categories.%s",
         os.path.join(os.path.dirname(__file__),"..", "categories"))
         ])
    spoke.set_path("spokes", [
        ("pyanaconda.ui.gui.spokes.%s",
         os.path.join(os.path.dirname(__file__), "..", "spokes"))
         ])
    
spoke.initialize()
    
if not spoke.showable:
    print "This %s is not showable, but I'll continue anyway." % spokeText

spoke.refresh()
spoke.window.set_beta(True)
spoke.window.set_property("distribution", "TEST HARNESS")
spoke.window.show_all()

Gtk.main()

if hasattr(spoke, "status"):
    print "%s status:\n%s\n" % (SpokeText, spoke.status)
if hasattr(spoke, "completed"):
    print "%s completed:\n%s\n" % (SpokeText, spoke.completed)
print "%s kickstart fragment:\n%s" % (SpokeText, ksdata)