From b9521c6a2de474de5205f264f7a2aa8e1b9243f6 Mon Sep 17 00:00:00 2001 From: Faik Uygur Date: Mon, 11 Jan 2010 13:57:47 +0000 Subject: [PATCH] Add get_package_requirements method to pisi api --- pisi/api.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/pisi/api.py b/pisi/api.py index add96a0d..58eff81f 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -578,6 +578,39 @@ def calculate_download_size(packages): total_size, cached_size = pisi.operations.helper.calculate_download_sizes(packages) return total_size, cached_size +def get_package_requirements(packages): + """ + Returns a dict with two keys - systemRestart, serviceRestart - with package lists as their values + @param packages: list of package names -> list_of_strings + + >>> lu = pisi.api.list_upgrades() + + >>> requirements = pisi.api.get_package_requirements(lu) + + >>> print requirements + >>> { "systemRestart":["kernel", "module-alsa-driver"], "serviceRestart":["mysql-server", "memcached", "postfix"] } + + """ + + requirements = { "systemRestart":[], "serviceRestart":[] } + installdb = pisi.db.installdb.InstallDB() + packagedb = pisi.db.packagedb.PackageDB() + + for i_pkg in packages: + try: + pkg = packagedb.get_package(i_pkg) + except Exception: #FIXME: Should catch RepoItemNotFound exception + pass + + (version, release, build) = installdb.get_version(i_pkg) + + updates = [i for i in pkg.history if pisi.version.Version(i.release) > pisi.version.Version(release)] + for key in ["systemRestart", "serviceRestart"]: + if pisi.util.any(lambda i:key in i.required_actions(), updates): + requirements[key].append(pkg.name) + + return requirements + # ****** Danger Zone Below! Tressspassers' eyes will explode! ********** # def package_graph(A, packagedb, ignore_installed = False):