-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmanager.py
112 lines (100 loc) · 4.26 KB
/
manager.py
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
import os
import logging
import yaml
import threading
from PySide import QtCore, QtGui
#from PyQt4 import QtCore, QtGui
from ui.mainwindow import Ui_MainWindow
import subprocess
from debian import deb822
import gzip
logger = logging.getLogger(__name__)
CWD = os.path.abspath(os.path.dirname(__file__))
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.debs = {}
self.parse_packages()
self.list_components()
self.list_installed_components()
self.update_table()
def list_components(self):
components = subprocess.check_output(
'hr cmd list_components install'.split(' '))
components = components.splitlines()
for component in ['head', 'head-deps', 'opencog', 'opencog-deps']:
if component in components:
components.remove(component)
self.components = components
def list_installed_components(self):
installed_components = subprocess.check_output(
'hr cmd list_installed'.split(' '))
self.installed_components = installed_components.splitlines()
def parse_packages(self):
self.debs = {}
package_file = os.path.join(CWD, 'Packages.gz')
with gzip.open(package_file, 'rb') as f:
content = f.read()
packages = content.strip().split('\n\n')
for package in packages:
deb = deb822.Deb822(package)
name = deb['Package']
self.debs[name] = deb
def get_installed_versions(self, components):
cmd = r"""dpkg-query -W -f='${Package} ${Status} ${Version}\n' """+' '.join(components)
versions = subprocess.check_output(cmd, shell=True).splitlines()
installed_versions = {}
for v in versions:
if 'installed' in v:
toks = v.split()
if len(toks) > 4:
installed_versions[toks[0]] = toks[-1]
return installed_versions
def update_table(self):
installed_versions = self.get_installed_versions(self.installed_components)
self.ui.componentTableWidget.setColumnCount(5)
self.ui.componentTableWidget.setRowCount(len(self.components))
self.ui.componentTableWidget.setColumnWidth(0, 30)
self.ui.componentTableWidget.setColumnWidth(1, 300)
self.ui.componentTableWidget.setColumnWidth(2, 120)
self.ui.componentTableWidget.setColumnWidth(3, 120)
self.ui.componentTableWidget.setHorizontalHeaderLabels(
['S', 'Package', 'Installed Version', 'Latest Version', 'Description'])
for row, key in enumerate(self.components):
status = QtGui.QTableWidgetItem()
if key in self.installed_components:
status.setCheckState(QtCore.Qt.Checked)
else:
status.setCheckState(QtCore.Qt.Unchecked)
self.ui.componentTableWidget.setItem(row, 0, status)
item = QtGui.QTableWidgetItem(key)
self.ui.componentTableWidget.setItem(row, 1, item)
if key in self.debs:
if key in installed_versions:
installed_version = QtGui.QTableWidgetItem(installed_versions[key])
self.ui.componentTableWidget.setItem(row, 2, installed_version)
version = QtGui.QTableWidgetItem(self.debs[key]['Version'])
self.ui.componentTableWidget.setItem(row, 3, version)
desc = QtGui.QTableWidgetItem(self.debs[key]['Description'])
self.ui.componentTableWidget.setItem(row, 4, desc)
if __name__ == "__main__":
import sys
fh = logging.FileHandler('manager.log', mode='w')
fh.setLevel(logging.INFO)
sh = logging.StreamHandler()
sh.setLevel(logging.WARN)
formatter = logging.Formatter(
'[%(name)s][%(levelname)s] %(asctime)s: %(message)s')
fh.setFormatter(formatter)
sh.setFormatter(formatter)
root_logger = logging.getLogger()
root_logger.setLevel(logging.INFO)
root_logger.addHandler(fh)
root_logger.addHandler(sh)
logger.info("Start")
app = QtGui.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())