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
|
#!/usr/bin/python
import sys
import time
import apt
class TextProgress(apt.OpProgress):
def __init__(self):
self.last=0.0
def update(self, percent):
if (self.last + 1.0) <= percent:
sys.stdout.write("\rProgress: %i.2 " % (percent))
self.last = percent
if percent >= 100:
self.last = 0.0
def done(self):
self.last = 0.0
print "\rDone "
class TextFetchProgress(apt.FetchProgress):
def __init__(self):
pass
def start(self):
pass
def stop(self):
pass
def updateStatus(self, uri, descr, shortDescr, status):
print "UpdateStatus: '%s' '%s' '%s' '%i' " % (
uri, descr, shortDescr, status)
def update_status_full(self, uri, descr, shortDescr, status, fileSize,
partialSize):
print "update_status_full: '%s' '%s' '%s' '%i' '%d/%d'" % (
uri, descr, shortDescr, status, partialSize, fileSize)
def pulse(self):
print "Pulse: CPS: %s/s; Bytes: %s/%s; Item: %s/%s" % (
apt.SizeToStr(self.currentCPS), apt.SizeToStr(self.currentBytes),
apt.SizeToStr(self.totalBytes), self.currentItems, self.totalItems)
return True
def pulse_items(self, items):
print "Pulse: CPS: %s/s; Bytes: %s/%s; Item: %s/%s" % (
apt.SizeToStr(self.currentCPS), apt.SizeToStr(self.currentBytes),
apt.SizeToStr(self.totalBytes), self.currentItems, self.totalItems)
print "Pulse-Items: "
for itm in items:
uri, descr, shortDescr, fileSize, partialSize = itm
print " - '%s' '%s' '%s' '%d/%d'" % (
uri, descr, shortDescr, partialSize, fileSize)
return True
def mediaChange(self, medium, drive):
print "Please insert medium %s in drive %s" % (medium, drive)
sys.stdin.readline()
#return False
class TextInstallProgress(apt.InstallProgress):
def __init__(self):
apt.InstallProgress.__init__(self)
pass
def startUpdate(self):
print "StartUpdate"
def finishUpdate(self):
print "FinishUpdate"
def statusChange(self, pkg, percent, status):
print "[%s] %s: %s" % (percent, pkg, status)
def updateInterface(self):
apt.InstallProgress.updateInterface(self)
# usefull to e.g. redraw a GUI
time.sleep(0.1)
class TextCdromProgress(apt.CdromProgress):
def __init__(self):
pass
# update is called regularly so that the gui can be redrawn
def update(self, text, step):
# check if we actually have some text to display
if text != "":
print "Update: %s %s" % (text.strip(), step)
def askCdromName(self):
print "Please enter cd-name: ",
cd_name = sys.stdin.readline()
return (True, cd_name.strip())
def changeCdrom(self):
print "Please insert cdrom and press <ENTER>"
answer = sys.stdin.readline()
return True
if __name__ == "__main__":
c = apt.Cache()
pkg = c["3dchess"]
if pkg.isInstalled:
pkg.markDelete()
else:
pkg.markInstall()
res = c.commit(TextFetchProgress(), TextInstallProgress())
print res
|