summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2005-10-20 10:08:11 +0000
committerMichael Vogt <michael.vogt@ubuntu.com>2005-10-20 10:08:11 +0000
commite608d6106a75a678fe121afd8020073b9ba80836 (patch)
tree7bac460c4af31cf3dd4af36db6dd7c33550740bb /doc
parentd75fe132ec6f5e07dfe96b99dd5ae2905a224386 (diff)
downloadpython-apt-e608d6106a75a678fe121afd8020073b9ba80836.tar.gz
* merged with the progress reporting code
Patches applied: * michael.vogt@ubuntu.com--2005/python-apt--progress-reporting--0--base-0 tag of michael.vogt@ubuntu.com--2005/python-apt--mvo--0--patch-43 * michael.vogt@ubuntu.com--2005/python-apt--progress-reporting--0--patch-1 * support the apt--progress-reporting--0 branch (using "InstallProgress.statusfd) * michael.vogt@ubuntu.com--2005/python-apt--progress-reporting--0--patch-2 * support for update reporting via vte/progress bars added, including a evil "pass-me-my-file-descriptor" hack * michael.vogt@ubuntu.com--2005/python-apt--progress-reporting--0--patch-3 * merged with python-apt--mvo * michael.vogt@ubuntu.com--2005/python-apt--progress-reporting--0--patch-4 * merged from python-apt--mvo * michael.vogt@ubuntu.com--2005/python-apt--progress-reporting--0--patch-5 * better support new python-apt, added example for gui-inst with support for VTE_PTY_KEEP_FD * michael.vogt@ubuntu.com--2005/python-apt--progress-reporting--0--patch-6 * removed the fdsend stuff again, libvte will be patched instead
Diffstat (limited to 'doc')
-rwxr-xr-x[-rw-r--r--]doc/examples/gui-inst.py54
-rw-r--r--doc/examples/inst.py16
2 files changed, 61 insertions, 9 deletions
diff --git a/doc/examples/gui-inst.py b/doc/examples/gui-inst.py
index b2f64e91..38417e10 100644..100755
--- a/doc/examples/gui-inst.py
+++ b/doc/examples/gui-inst.py
@@ -3,8 +3,10 @@
# see also gnome bug: #169201
import apt_pkg
-import sys, os
+import sys, os, fcntl
import copy
+import string
+import fcntl
import pygtk
pygtk.require('2.0')
@@ -28,13 +30,14 @@ class GuiFetchProgress(gtk.Window, FetchProgress):
self.vbox.pack_start(self.label)
self.resize(300,100)
def start(self):
- self.progress.set_fraction(0)
+ print "start"
+ self.progress.set_fraction(0.0)
self.show()
def stop(self):
self.hide()
def pulse(self):
self.label.set_text("Speed: %s/s" % apt_pkg.SizeToStr(self.currentCPS))
- self.progress.set_fraction(self.currentBytes/self.totalBytes)
+ #self.progressbar.set_fraction(self.currentBytes/self.totalBytes)
while gtk.events_pending():
gtk.main_iteration()
@@ -42,21 +45,54 @@ class TermInstallProgress(InstallProgress, gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.show()
+ box = gtk.VBox()
+ box.show()
+ self.add(box)
self.term = vte.Terminal()
self.term.show()
- self.add(self.term)
- def start(self):
- self.progress.set_fraction(0)
+ box.pack_start(self.term)
+ self.progressbar = gtk.ProgressBar()
+ self.progressbar.show()
+ box.pack_start(self.progressbar)
+
+ (read, write) = os.pipe()
+ self.writefd=write
+ self.status = os.fdopen(read, "r")
+ fcntl.fcntl(self.status.fileno(), fcntl.F_SETFL,os.O_NONBLOCK)
+ print "read-fd: %s" % self.status.fileno()
+ print "write-fd: %s" % self.writefd
+ self.read = ""
+
+ def startUpdate(self):
+ print "start"
self.show()
- def stop(self):
- self.hide()
def updateInterface(self):
+ if self.status != None:
+ try:
+ self.read += os.read(self.status.fileno(),1)
+ except OSError, (errno,errstr):
+ # resource temporarly unavailable is ignored
+ if errno != 11:
+ print errstr
+ if self.read.endswith("\n"):
+ s = self.read
+ print s
+ (status, pkg, percent, status_str) = string.split(s, ":")
+ print "percent: %s %s" % (pkg, float(percent)/100.0)
+ self.progressbar.set_fraction(float(percent)/100.0)
+ self.progressbar.set_text(string.strip(status_str))
+ self.read = ""
while gtk.events_pending():
gtk.main_iteration()
def finishUpdate(self):
sys.stdin.readline()
def fork(self):
- return self.term.forkpty()
+ print "fork"
+ env = ["VTE_PTY_KEEP_FD=%s"%self.writefd]
+ print env
+ pid = self.term.forkpty(envv=env)
+ print "After fork: %s " % pid
+ return pid
# init
diff --git a/doc/examples/inst.py b/doc/examples/inst.py
index b25cf542..fe5ec8e3 100644
--- a/doc/examples/inst.py
+++ b/doc/examples/inst.py
@@ -1,6 +1,7 @@
#!/usr/bin/python
# example how to deal with the depcache
+import apt
import apt_pkg
import sys, os
import copy
@@ -8,6 +9,21 @@ import copy
from progress import TextFetchProgress, TextInstallProgress
from apt.progress import OpTextProgress
+class TextInstallProgress(InstallProgress):
+ def __init__(self):
+ InstallProgress.__init__(self)
+ self.status = None
+ def StartUpdate(self):
+ print "StartUpdate: %s" % self.statusfd
+ self.status = os.fdopen(self.statusfd, "r")
+ print self.status
+ def UpdateInterface(self):
+ if self.status != None:
+ s = self.status.readline()
+ if s:
+ print s
+ def FinishUpdate(self):
+ self.status.close()
# init
apt_pkg.init()