From 46e216e77ab6230eb7245be79c25bb181b76fcb7 Mon Sep 17 00:00:00 2001 From: Tom Parker Date: Thu, 30 Aug 2007 14:09:57 +0200 Subject: [PATCH] Redo pkt as a better apt-* like tool --- tools/pkt.py | 98 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 84 insertions(+), 14 deletions(-) mode change 100644 => 100755 tools/pkt.py diff --git a/tools/pkt.py b/tools/pkt.py old mode 100644 new mode 100755 index 85e6dfdca..5d9fbf66f --- a/tools/pkt.py +++ b/tools/pkt.py @@ -1,31 +1,101 @@ #!/usr/bin/python -from sys import argv - +from sys import argv,exit +from types import * import dbus from dbus.mainloop.glib import DBusGMainLoop DBusGMainLoop(set_as_default=True) import gobject +from optparse import OptionParser bus = dbus.SystemBus() -pk = bus.get_object('org.freedesktop.PackageKit', '/org/freedesktop/PackageKit') -pk_iface = dbus.Interface(pk, dbus_interface='org.freedesktop.PackageKit') +try: + pk = bus.get_object('org.freedesktop.PackageKit', '/org/freedesktop/PackageKit') + pk_iface = dbus.Interface(pk, dbus_interface='org.freedesktop.PackageKit') +except dbus.exceptions.DBusException,e: + if e.get_dbus_name() == "org.freedesktop.DBus.Error.ServiceUnknown": + print "PackageKit doesn't appear to be started. You may need to enable dbus autostart" + exit(1) + else: + raise job = None +progress = 0.0 def catchall_signal_handler(*args, **kwargs): - global job - print ("Caught signal (in catchall handler) " - + kwargs['dbus_interface'] + "." + kwargs['member']) - for arg in args: - print " " + str(arg) + global job,progress + if args[0] != job and kwargs['member']!="JobListChanged": + print args,job,kwargs + raise Exception if kwargs['member'] == "Finished": - if args[0] == job: - loop.quit() + loop.quit() + elif kwargs['member'] == "PercentageChanged": + progress = float(args[1])+(progress%1.0) + print "Progress: %.2f%%"%progress + elif kwargs['member'] == "SubPercentageChanged": + progress = (float(args[1])/100.0)+int(progress) + print "Progress: %.2f%%"%progress + elif kwargs['member'] == "JobStatusChanged": + print "Job type: %s"%args[1] + elif kwargs['member'] == "Package": + print "Package: %s - %s"%(args[2],args[3]) + elif kwargs['member'] in ["NoPercentageUpdates","JobListChanged"]: + pass + else: + print "Caught signal %s"% kwargs['member'] + for arg in args: + print " " + str(arg) -bus.add_signal_receiver(catchall_signal_handler, interface_keyword='dbus_interface', member_keyword='member') +bus.add_signal_receiver(catchall_signal_handler, interface_keyword='dbus_interface', member_keyword='member',dbus_interface="org.freedesktop.PackageKit") + +def search(*args): + patt = " ".join(args[0]) + return pk_iface.SearchName("",patt) + +def desc(*args): + if len(args)!=1 or len(args[0])!=1: + print "desc only takes single arg" + return -1 + return pk_iface.GetDescription(args[0][0]) + +def update(args): + if len(args)>0 and len(args[0])>0: + print "update doesn't take args" + return -1 + return pk_iface.RefreshCache(False) + +def usage(): + print "Usage: %s "%argv[0] + print "Valid commands are:" + for k in globals().keys(): + if k in ["usage","catchall_signal_handler"]: #ignore + continue + g = globals()[k] + if type(g) == FunctionType: + print "\t%s"%k + exit(1) + +parser = OptionParser() +(options, args) = parser.parse_args() + +if len(args)==0: + usage() + +if not globals().has_key(args[0]): + print "Don't know operation '%s'"%args[0] + usage() + +try: + job = globals()[args[0]](args[1:]) +except dbus.exceptions.DBusException,e: + if e.get_dbus_name() == "org.freedesktop.DBus.Error.AccessDenied": + print "You don't have sufficient permissions to access PackageKit (on the org.freedesktop.PackageKit dbus service)" + exit(1) + else: + raise + +if job == -1: + usage() -job = pk_iface.SearchName("",argv[1]) -print "job",job loop = gobject.MainLoop() loop.run()