summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <egon@tas>2007-03-06 12:28:05 +0100
committerMichael Vogt <egon@tas>2007-03-06 12:28:05 +0100
commit29acfcee494341dca6ab27ea646d99955dd78d14 (patch)
treeb93fcb3e7782a33caf639d6476fd5696b8c04847
parent9f0a976e63fe1f429036d9d6492fbfb06d26eae8 (diff)
downloadpython-apt-29acfcee494341dca6ab27ea646d99955dd78d14.tar.gz
* apt/package.py:
- added candidateDependencies, installedDependencies
-rw-r--r--apt/package.py53
-rw-r--r--debian/changelog3
2 files changed, 54 insertions, 2 deletions
diff --git a/apt/package.py b/apt/package.py
index 0d1145ea..99dbdd9e 100644
--- a/apt/package.py
+++ b/apt/package.py
@@ -24,6 +24,17 @@ import sys
import random
import string
+class BaseDependency(object):
+ " a single dependency "
+ def __init__(self, name, rel, ver, pre):
+ self.name = name
+ self.relation = rel
+ self.version = ver
+ self.preDepend = pre
+
+class Dependency(object):
+ def __init__(self, alternatives):
+ self.or_dependencies = alternatives
class Package(object):
""" This class represents a package in the cache
@@ -94,6 +105,35 @@ class Package(object):
return None
candidateVersion = property(candidateVersion)
+ def _getDependencies(self, ver):
+ depends_list = []
+ depends = ver.DependsList
+ for t in ["PreDepends", "Depends"]:
+ if not depends.has_key(t):
+ continue
+ for depVerList in depends[t]:
+ base_deps = []
+ for depOr in depVerList:
+ base_deps.append(BaseDependency(depOr.TargetPkg.Name, depOr.TargetVer, depOr.CompType, (t == "PreDepends")))
+ depends_list.append(Dependency(base_deps))
+ return depends_list
+
+ @property
+ def candidateDependencies(self):
+ """ return a list of candidate dependencies """
+ candver = self._depcache.GetCandidateVer(self._pkg)
+ if candver == None:
+ return []
+ return self._getDependencies(candver)
+
+ @property
+ def installedDependencies(self):
+ """ return a list of installed dependencies """
+ ver = self._pkg.CurrentVer
+ if ver == None:
+ return []
+ return self._getDependencies(ver)
+
def _downloadable(self, useCandidate=True):
""" helper, return if the version is downloadable """
if useCandidate:
@@ -159,7 +199,11 @@ class Package(object):
if not self._lookupRecord():
return ""
desc = ""
- for line in string.split(self._records.LongDesc, "\n"):
+ try:
+ tmp = unicode(self._records.LongDesc)
+ except UnicodeDecodeError:
+ tmp = "Invalid unicode in description"
+ for line in string.split(tmp, "\n"):
tmp = string.strip(line)
if tmp == ".":
desc += "\n"
@@ -238,6 +282,8 @@ class Package(object):
def installedSize(self):
""" The size of the currently installed package """
ver = self._pkg.CurrentVer
+ if ver is None:
+ return 0
return ver.InstalledSize
installedSize = property(installedSize)
@@ -344,6 +390,11 @@ if __name__ == "__main__":
print "Description (unformated):\n%s" % pkg.rawDescription
print "InstalledSize: %s " % pkg.installedSize
print "PackageSize: %s " % pkg.packageSize
+ print "Dependencies: %s" % pkg.installedDependencies
+ for dep in pkg.candidateDependencies:
+ print ",".join(["%s (%s) (%s) (%s)" % (o.name,o.version,o.relation, o.preDepend) for o in dep.or_dependencies])
+
+
# now test install/remove
import apt
diff --git a/debian/changelog b/debian/changelog
index e8d06ebf..f55793df 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,7 +2,8 @@ python-apt (0.6.21) unstable; urgency=low
* apt/cdrom.py:
- better cdrom handling support
- * python/string.cc:
+ * apt/package.py:
+ - added candidateDependencies, installedDependencies
- SizeToString supports PyLong too
* apt/cache.py:
- fix rootdir