add status label to mainscreen.
[sface.git] / sface / sfiprocess.py
1
2 import os
3 from PyQt4.QtCore import *
4 from sface.sficonfig import config
5
6 def find_executable(exec_name):
7     """find the given executable in $PATH"""
8     paths = os.getenv("PATH").split(':')
9     for p in paths:
10         exec_path = os.path.join(p, exec_name)
11         if os.path.exists(exec_path):
12             return exec_path
13     return None
14
15
16 class SfiProcess(QObject):
17     def __init__(self, parent=None):
18         QObject.__init__(self, parent)
19
20     def __init_command(self, args):
21         self.args = QStringList()
22         for arg in args:
23             self.args << QString(arg)
24
25         self.exe = find_executable("sfi.py")
26         self.process = QProcess()
27
28         self.finished = pyqtSignal()
29         self.connect(self.process, SIGNAL("finished(int, QProcess::ExitStatus)"),
30                      self.finished)
31
32     def __getRSpec(self, mgr):
33         slice = config.getSlice()
34         # Write RSpec to file for testing.
35         filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
36         try:
37             os.remove(filename)
38         except:
39             pass
40         args = ["-u", config.getUser(), "-a", config.getAuthority(), 
41                 "-r", config.registry(), "-s", mgr, "resources", 
42                 "-o", filename, slice]
43
44         self.__init_command(args)
45         self.start()
46         return filename
47
48     def getRSpecFromSM(self):
49         return self.__getRSpec(config.slicemgr())
50
51     def getRSpecFromAM(self):
52         return self.__getRSpec(config.aggmgr())
53
54     def getRecord(self, hrn):
55         args = ["-u", config.getUser(), "-a", config.getAuthority(), 
56                 "-r", config.registry(), "-s", config.slicemgr(), "show", hrn]
57         self.__init_command(args)
58         self.start()
59
60     def start(self):
61         self.process.start(self.exe, self.args)
62
63     def readOutput(self):
64         if self.process.state() == QProcess.NotRunning:
65             return self.process.readAll()
66