[packagekit] packagekit: Branch 'master' - 4 commits
Richard Hughes
hughsient at kemper.freedesktop.org
Mon Oct 1 12:56:56 PDT 2007
TODO | 3
backends/conary/helpers/conaryBackend.py | 67 --------
python/packagekit/frontend.py | 252 ++++++++++++++++++++++++++++++-
python/pk-frontend-test.py | 13 +
4 files changed, 265 insertions(+), 70 deletions(-)
New commits:
diff-tree 48297dbb9e4af55686af6ccd272a441b035fa5f2 (from a21422005fa99b60e8f8d33c0075c4cbcdbbb981)
Author: Richard Hughes <richard at hughsie.com>
Date: Mon Oct 1 20:13:08 2007 +0100
update TODO
diff --git a/TODO b/TODO
index 3f4b12c..f5a2387 100644
--- a/TODO
+++ b/TODO
@@ -36,9 +36,6 @@ to expose in the UI.
Client programs using libpackagekit should know the error, rather than just
"it failed"
-*** Log what was installed/removed and when ***
-Need to monitor the Package's emitted by the task and encoded to a string
-
*** Handle rollbacks for select backends ***
To do rollbacks sanely in PK we need a few things:
* emit internal signal for SetTransactionData
diff-tree a21422005fa99b60e8f8d33c0075c4cbcdbbb981 (from f5432fe0048a6edffd53536a420f5a76650d707f)
Author: Ken VanDine <ken at vandine.org>
Date: Mon Oct 1 14:49:23 2007 -0400
More fixes for the new enum installed status
diff --git a/backends/conary/helpers/conaryBackend.py b/backends/conary/helpers/conaryBackend.py
index 512f46e..8543d8c 100644
--- a/backends/conary/helpers/conaryBackend.py
+++ b/backends/conary/helpers/conaryBackend.py
@@ -173,7 +173,7 @@ class PackageKitConaryBackend(PackageKit
name, version, flavor, installed = self._findPackage(package_id)
if name:
- if installed:
+ if installed == INFO_INSTALLED:
self.error(ERROR_PACKAGE_ALREADY_INSTALLED,
'Package already installed')
try:
@@ -192,7 +192,7 @@ class PackageKitConaryBackend(PackageKit
name, version, flavor, installed = self._findPackage(package_id)
if name:
- if not installed:
+ if not installed == INFO_INSTALLED:
self.error(ERROR_PACKAGE_NOT_INSTALLED,
'Package not installed')
try:
@@ -278,9 +278,9 @@ class PackageKitConaryBackend(PackageKit
do_print = False;
if filterList == ['none']: # 'none' = all packages.
return True
- elif 'installed' in filterList and installed == 1:
+ elif 'installed' in filterList and installed == INFO_INSTALLED:
do_print = True
- elif '~installed' in filterList and installed == 0:
+ elif '~installed' in filterList and installed == INFO_AVAILABLE:
do_print = True
if len(filterList) == 1: # Only one filter, return
diff-tree f5432fe0048a6edffd53536a420f5a76650d707f (from ab844c1dd98fbb7c9bd8bd2abcd2b7983b4dca7a)
Author: Robin Norwood <rnorwood at redhat.com>
Date: Mon Oct 1 14:26:43 2007 -0400
Add all of the existing methods an signal handlers to frontend.py
Generated from pk-interface.xml, but most calls seem to work.
diff --git a/python/packagekit/frontend.py b/python/packagekit/frontend.py
index f38d7e8..1ee56f9 100644
--- a/python/packagekit/frontend.py
+++ b/python/packagekit/frontend.py
@@ -214,24 +214,272 @@ class PackageKit:
# --- PK Methods ---
+
+## Start a new transaction to do Foo
@dbusException
@job_id
+ def GetUpdates(self):
+ """
+ Lists packages which could be updated.
+ Causes 'Package' signals for each available package.
+ """
+ return self.pk_iface.GetUpdates(self.tid())
+
+ @dbusException
+ @job_id
+ def RefreshCache(self,force=False):
+ """
+ Refreshes the backend's cache.
+ """
+ return self.pk_iface.RefreshCache(self.tid(),force)
+
+ @dbusException
+ @job_id
+ def UpdateSystem(self):
+ """
+ Applies all available updates.
+ Asynchronous
+ """
+ return self.pk_iface.UpdateSystem(self.tid())
+
+ @dbusException
+ @job_id
+ def Resolve(self,package_id):
+ """
+ Resolves dependancies.
+ (description is a guess, since this not yet supported in yum backend, and maybe others)
+ """
+ return self.pk_iface.Resolve(self.tid(),package_id)
+
+ @dbusException
+ @job_id
def SearchName(self,pattern,filter="none"):
+ """
+ Searches the 'Name' field for something matching 'pattern'.
+ 'filter' could be 'installed', a repository name, or 'none'.
+ Causes 'Package' signals for each package found.
+ """
return self.pk_iface.SearchName(self.tid(),filter,pattern)
@dbusException
@job_id
+ def SearchDetails(self,pattern,filter="none"):
+ """
+ Searches the 'Details' field for something matching 'pattern'.
+ 'filter' could be 'installed', a repository name, or 'none'.
+ Causes 'Package' signals for each package found.
+ """
+ return self.pk_iface.SearchDetails(self.tid(),filter,pattern)
+
+ @dbusException
+ @job_id
+ def SearchGroup(self,pattern,filter="none"):
+ """
+ Lists all packages in groups matching 'pattern'.
+ 'filter' could be 'installed', a repository name, or 'none'.
+ Causes 'Package' signals for each package found.
+ (description is a guess, since this not yet supported in yum backend, and maybe others)
+ """
+ return self.pk_iface.SearchGroup(self.tid(),filter,pattern)
+
+ @dbusException
+ @job_id
+ def SearchFile(self,pattern,filter="none"):
+ """
+ Lists all packages that provide a file matching 'pattern'.
+ 'filter' could be 'installed', a repository name, or 'none'.
+ Causes 'Package' signals for each package found.
+ """
+ return self.pk_iface.SearchFile(self.tid(),filter,pattern)
+
+ @dbusException
+ @job_id
+ def GetDepends(self,package_id):
+ """
+ Lists package dependancies?
+ (description is a guess, since this doesn't seem to work for me)
+ """
+ return self.pk_iface.GetDepends(self.tid(),package_id)
+
+ @dbusException
+ @job_id
+ def GetRequires(self,package_id):
+ """
+ Lists package dependancies?
+ (description is a guess, since this not doesn't seem to work for me)
+ """
+ return self.pk_iface.GetRequires(self.tid(),package_id)
+
+ @dbusException
+ @job_id
+ def GetUpdateDetail(self,package_id):
+ """
+ More details about an update.
+ (description is a guess, since this not yet supported in yum backend, and maybe others)
+ """
+ return self.pk_iface.GetUpdateDetail(self.tid(),package_id)
+
+ @dbusException
+ @job_id
def GetDescription(self,package_id):
+ """
+ Gets the Description of a given package_id.
+ Causes a 'Description' signal.
+ """
return self.pk_iface.GetDescription(self.tid(),package_id)
@dbusException
@job_id
- def RefreshCache(self,force=False):
- return self.pk_iface.RefreshCache(self.tid(),force)
+ def RemovePackage(self,package_id,allow_deps=False ):
+ """
+ Removes a package.
+ Asynchronous
+ """
+ return self.pk_iface.RemovePackage(self.tid(),package_id,allow_deps)
+
+ @dbusException
+ @job_id
+ def InstallPackage(self,package_id):
+ """
+ Installs a package.
+ Asynchronous
+ """
+ return self.pk_iface.InstallPackage(self.tid(),package_id)
+
+ @dbusException
+ @job_id
+ def UpdatePackage(self,package_id):
+ """
+ Updates a package.
+ Asynchronous
+ """
+ return self.pk_iface.UpdatePackage(self.tid(),package_id)
+
+ @dbusException
+ @job_id
+ def InstallFile(self,full_path):
+ """
+ Installs a package which provides given file?
+ Asynchronous
+ """
+ return self.pk_iface.InstallFile(self.tid(),full_path)
+
+## Do things or query transactions
+ @dbusException
+ @job_id
+ def Cancel(self):
+ """
+ Might not succeed for all manner or reasons.
+ throws NoSuchTransaction
+ """
+ return self.pk_iface.Cancel(self.tid())
+
+ @dbusException
+ @job_id
+ def GetStatus(self):
+ """
+ This is what the transaction is currrently doing, and might change.
+ Returns status (query,download,install,exit)
+ throws NoSuchTransaction
+ """
+ return self.pk_iface.GetStatus(self.tid())
+
+ @dbusException
+ @job_id
+ def GetRole(self):
+ """
+ This is the master role, i.e. won't change for the lifetime of the transaction
+ Returns status (query,download,install,exit) and package_id (package acted upon, or NULL
+ throws NoSuchTransaction
+ """
+ return self.pk_iface.GetRole(self.tid())
+
+ @dbusException
+ @job_id
+ def GetPercentage(self):
+ """
+ Returns percentage of transaction complete
+ throws NoSuchTransaction
+ """
+ return self.pk_iface.GetPercentage(self.tid())
+
+ @dbusException
+ @job_id
+ def GetSubPercentage(self):
+ """
+ Returns percentage of this part of transaction complete
+ throws NoSuchTransaction
+ """
+ return self.pk_iface.GetSubPercentage(self.tid())
+
+ @dbusException
+ @job_id
+ def GetPackage(self):
+ """
+ Returns package being acted upon at this very moment
+ throws NoSuchTransaction
+ """
+ return self.pk_iface.GetPackage(self.tid())
+
+## Get lists of transactions
+
+ @dbusException
+ def GetTransactionList(self):
+ """
+ Returns list of (active) transactions.
+ """
+ return self.pk_iface.GetTransactionList()
@dbusException
@job_id
def GetOldTransactions(self,number=5):
+ """
+ Causes Transaction signals for each Old transaction.
+ """
return self.pk_iface.GetOldTransactions(self.tid(),number)
+## General methods
+
+ @dbusException
+ def GetBackendDetail(self):
+ """
+ Returns name, author, and version of backend.
+ """
+ return self.pk_iface.GetBackendDetail()
+
+ @dbusException
+ def GetActions(self):
+ """
+ Returns list of supported actions.
+ """
+ return self.pk_iface.GetActions()
+
+ @dbusException
+ def GetGroups(self):
+ """
+ Returns list of supported groups.
+ """
+ return self.pk_iface.GetGroups()
+
+ @dbusException
+ def GetFilters(self):
+ """
+ Returns list of supported filters.
+ """
+ return self.pk_iface.GetFilters()
+
+
+class DumpingPackageKit(PackageKit):
+ """
+ Just like PackageKit(), but prints all signals instead of handling them
+ """
+ def catchall_signal_handler(self,*args, **kwargs):
+ if kwargs['member'] == "Finished":
+ self.loop.quit()
+
+ print "Caught signal %s"% kwargs['member']
+ print " args:"
+ for arg in args:
+ print " " + str(arg)
+
diff --git a/python/pk-frontend-test.py b/python/pk-frontend-test.py
index c64a350..8f8eb25 100755
--- a/python/pk-frontend-test.py
+++ b/python/pk-frontend-test.py
@@ -64,7 +64,7 @@ def desc(*args):
raise PackageKitTransactionFailure
return p.GetDescription(args[0][0])
-def refresh_cache(args):
+def refresh_cache(*args):
if len(args)>0 and len(args[0])>0:
print "refresh_cache doesn't take args"
raise PackageKitTransactionFailure
@@ -82,6 +82,15 @@ def history(*args):
return p.GetOldTransactions(count)
+def get_backend_detail(*args):
+ details = p.GetBackendDetail()
+ for d in details:
+ print " %s" % d
+
+ # Quit immediately because no job was scheduled
+ exit(0)
+
+
def usage():
print "Usage: %s <command> <options>"%argv[0]
print "Valid commands are:"
@@ -104,7 +113,7 @@ if not globals().has_key(args[0]):
usage()
try:
- job = globals()[args[0]](args[1:])
+ globals()[args[0]](args[1:])
except PackageKitAccessDenied:
print "You don't have sufficient permissions to access PackageKit (on the org.freedesktop.PackageKit dbus service)"
exit(1)
diff-tree ab844c1dd98fbb7c9bd8bd2abcd2b7983b4dca7a (from 0b860848bc7253bf30eaac526e6b8110b586d783)
Author: Ken VanDine <ken at vandine.org>
Date: Mon Oct 1 13:41:16 2007 -0400
Removed live search
diff --git a/backends/conary/helpers/conaryBackend.py b/backends/conary/helpers/conaryBackend.py
index b71771e..512f46e 100644
--- a/backends/conary/helpers/conaryBackend.py
+++ b/backends/conary/helpers/conaryBackend.py
@@ -99,59 +99,6 @@ class PackageKitConaryBackend(PackageKit
id = self.get_package_id(name, version, flavor)
self.package(id, installed, summary)
- def _do_search_live(self, searchlist, filters):
- '''
- Search for conary packages
- @param searchlist: The conary package fields to search in
- @param options: package types to search (all,installed,available)
- '''
- repos = self.client.getRepos()
- db = conaryclient.ConaryClient(self.cfg).db
- affinityDb = self.client.db
- fltlist = filters.split(';')
-
- troveSpecs = [ updatecmd.parseTroveSpec(searchlist,
- allowEmptyName=False) ]
-
- try:
- # Look for packages with affinity
- troveTupleList = queryrep.getTrovesToDisplay(repos, troveSpecs,
- None, None, queryrep.VERSION_FILTER_LATEST,
- queryrep.FLAVOR_FILTER_BEST, self.cfg.installLabelPath,
- self.cfg.flavor, affinityDb)
- # Look for packages regardless of affinity
- troveTupleList.extend(queryrep.getTrovesToDisplay(repos, troveSpecs,
- None, None, queryrep.VERSION_FILTER_LATEST,
- queryrep.FLAVOR_FILTER_BEST, self.cfg.installLabelPath,
- self.cfg.flavor, None))
- # Remove dupes
- tempDict = {}
- try:
- for element in troveTupleList:
- tempDict[element] = None
- except TypeError:
- del tempDict # move on to the next method
- else:
- troveTupleList = tempDict.keys()
-
- # Get the latest first
- troveTupleList.sort()
- troveTupleList.reverse()
-
- for troveTuple in troveTupleList:
- name = troveTuple[0]
- version = troveTuple[1]
- flavor = troveTuple[2]
- # We don't have summary data yet... so leave it blank for now
- summary = " "
- installed = self.check_installed(troveTuple)
-
- if self._do_filtering(name,fltlist,installed):
- id = self.get_package_id(name, version, flavor)
- self.package(id, installed, summary)
- except:
- self.error(ERROR_INTERNAL_ERROR, 'An internal error has occurred')
-
def _do_update(self, applyList, apply=False):
updJob = self.client.newUpdateJob()
suggMap = self.client.prepareUpdateJob(updJob, applyList)
@@ -185,12 +132,6 @@ class PackageKitConaryBackend(PackageKit
'''
self._do_search(searchlist, options)
- def search_name_live(self, options, searchlist):
- '''
- Implement the {backend}-search-name-live functionality
- '''
- self._do_search_live(searchlist, options)
-
def search_details(self, opt, key):
pass
More information about the PackageKit
mailing list