summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Heinlein <sebi@sebi-laptop>2007-03-22 14:06:10 +0100
committerSebastian Heinlein <sebi@sebi-laptop>2007-03-22 14:06:10 +0100
commitd5158ac9c2d1a56f548aa5e1e8fa955b24a5a792 (patch)
treec221e8542fb8b0ef19097cd6ae597391ee8d9fc0
parent8e179c8fd3b02b0dacac7ecbfbd08447d9c9ba43 (diff)
parent6b02ff1915b3dcd098474e1b9ccd5f89d6b777da (diff)
downloadpython-apt-d5158ac9c2d1a56f548aa5e1e8fa955b24a5a792.tar.gz
* merge
-rw-r--r--apt/cache.py3
-rw-r--r--apt/cdrom.py4
-rw-r--r--apt/package.py75
-rw-r--r--debian/changelog11
4 files changed, 86 insertions, 7 deletions
diff --git a/apt/cache.py b/apt/cache.py
index 690510e3..9e682bd8 100644
--- a/apt/cache.py
+++ b/apt/cache.py
@@ -33,11 +33,10 @@ class Cache(object):
def __init__(self, progress=None, rootdir=None):
self._callbacks = {}
- self.open(progress)
-
if rootdir:
apt_pkg.Config.Set("Dir", rootdir)
apt_pkg.Config.Set("Dir::State::status", rootdir + "/var/lib/dpkg/status")
+ self.open(progress)
def _runCallbacks(self, name):
""" internal helper to run a callback """
diff --git a/apt/cdrom.py b/apt/cdrom.py
index d499b30a..8d73339c 100644
--- a/apt/cdrom.py
+++ b/apt/cdrom.py
@@ -1,6 +1,6 @@
import apt_pkg
-from apt.progress import CdromProgress
+from progress import CdromProgress
class Cdrom(object):
def __init__(self, progress=None, mountpoint=None, nomount=True):
@@ -12,7 +12,7 @@ class Cdrom(object):
"""
self._cdrom = apt_pkg.GetCdrom()
if progress is None:
- self._progress = apt.progress.CdromProgress()
+ self._progress = CdromProgress()
else:
self._progress = progress
# see if we have a alternative mountpoint
diff --git a/apt/package.py b/apt/package.py
index 0d1145ea..13481be3 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,44 @@ 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
+
+ def candidateDependencies(self):
+ """ return a list of candidate dependencies """
+ candver = self._depcache.GetCandidateVer(self._pkg)
+ if candver == None:
+ return []
+ return self._getDependencies(candver)
+ candidateDependencies = property(candidateDependencies)
+
+ def installedDependencies(self):
+ """ return a list of installed dependencies """
+ ver = self._pkg.CurrentVer
+ if ver == None:
+ return []
+ return self._getDependencies(ver)
+ installedDependencies = property(installedDependencies)
+
+ def architecture(self):
+ if not self._lookupRecord():
+ return None
+ sec = apt_pkg.ParseSection(self._records.Record)
+ if sec.has_key("Architecture"):
+ return sec["Architecture"]
+ return None
+ architecture = property(architecture)
+
def _downloadable(self, useCandidate=True):
""" helper, return if the version is downloadable """
if useCandidate:
@@ -159,7 +208,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"
@@ -175,6 +228,19 @@ class Package(object):
return self._records.LongDesc
rawDescription = property(rawDescription)
+ def candidateRecord(self):
+ " return the full pkgrecord as string of the candidate version "
+ if not self._lookupRecord(True):
+ return None
+ return self._records.Record
+ candidateRecord = property(candidateRecord)
+
+ def installedRecord(self):
+ " return the full pkgrecord as string of the installed version "
+ if not self._lookupRecord(False):
+ return None
+ return self._records.Record
+ installedRecord = property(installedRecord)
# depcache states
def markedInstall(self):
@@ -238,6 +304,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 +412,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])
+ print "arch: %s" % pkg.architecture
+ print "rec: ",pkg.candidateRecord
# now test install/remove
import apt
diff --git a/debian/changelog b/debian/changelog
index 7833dc00..cab337f6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,8 +2,15 @@ python-apt (0.6.21) unstable; urgency=low
* apt/cdrom.py:
- better cdrom handling support
- * python/string.cc:
- - SizeToString supports PyLong too
+ * apt/package.py:
+ - added candidateDependencies, installedDependencies
+ - SizeToString supports PyLong too
+ - support pkg.architecture
+ - support candidateRecord, installedRecord
+ * apt/cache.py:
+ - fix rootdir
+ * apt/cdrom.py:
+ - fix bug in cdrom mountpoint handling
--