summaryrefslogtreecommitdiffstats
path: root/pyanaconda/ui/tui/tools/run-text-spoke.py
blob: b542fcb8b415af81be1c62cd41329af168db4631 (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
#!/usr/bin/python

import sys, os
import os.path

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

# 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 pyanaconda.platform import getPlatform
from pykickstart.version import makeVersion
from pyanaconda.ui.tui.simpleline import App
from pyanaconda.ui.tui import YesNoDialog

# 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-text-spoke.py":
    spokeModuleName = "pyanaconda.ui.tui.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-text-hub.py":
    spokeModuleName = "pyanaconda.ui.tui.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
spokeClassName = 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:
            print k,v
            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)

platform = getPlatform()
ksdata = makeVersion()
storage = Storage(data=ksdata, platform=platform)
storage.reset()
instclass = DefaultInstall()
app = App("TEST HARNESS", yes_or_no_question = YesNoDialog)

payload = YumPayload(ksdata)
payload.setup(storage)
payload.install_log = sys.stdout

spoke = spokeClass(app, ksdata, storage, payload, instclass)

if not spoke.showable:
    print "This %s is not showable, but I'll continue anyway." % spokeText

app.schedule_screen(spoke)
app.run()

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)