diff options
| author | Michael Vogt <michael.vogt@ubuntu.com> | 2007-07-30 22:46:27 +0200 |
|---|---|---|
| committer | Michael Vogt <michael.vogt@ubuntu.com> | 2007-07-30 22:46:27 +0200 |
| commit | e124705b95abb6ea3c4c6f96ed5559dac8a2c697 (patch) | |
| tree | 26f9eed0e173d47bd63456aecfee76506ce537d5 /apt/debfile.py | |
| parent | a13e90fd1c1f2809d60f61c1d16a3cf4ebba18c9 (diff) | |
| download | python-apt-e124705b95abb6ea3c4c6f96ed5559dac8a2c697.tar.gz | |
* apt/debfile.py:
- added wrapper around apt_inst.debExtract()
- support dictionary like access
* python/apt_instmodule.cc:
- added arCheckMember()
Diffstat (limited to 'apt/debfile.py')
| -rw-r--r-- | apt/debfile.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/apt/debfile.py b/apt/debfile.py new file mode 100644 index 00000000..ddde5bf1 --- /dev/null +++ b/apt/debfile.py @@ -0,0 +1,58 @@ +import apt_inst +import apt_pkg +from apt_inst import arCheckMember + +from gettext import gettext as _ + +class NoDebArchiveException(IOError): + pass + +class DebPackage(object): + + _supported_data_members = ("data.tar.gz", "data.tar.bz2", "data.tar.lzma") + + def __init__(self, filename=None): + self._section = {} + if filename: + self.open(filename) + + def open(self, filename): + " open given debfile " + self.filename = filename + if not arCheckMember(open(self.filename), "debian-binary"): + raise NoDebArchiveException, _("This is not a valid DEB archive, missing '%s' member" % "debian-binary") + control = apt_inst.debExtractControl(open(self.filename)) + self._sections = apt_pkg.ParseSection(control) + self.pkgname = self._sections["Package"] + + def __getitem__(self, key): + return self._sections[key] + + def filelist(self): + """ return the list of files in the deb """ + files = [] + def extract_cb(What,Name,Link,Mode,UID,GID,Size,MTime,Major,Minor): + #print "%s '%s','%s',%u,%u,%u,%u,%u,%u,%u"\ + # % (What,Name,Link,Mode,UID,GID,Size, MTime, Major, Minor) + files.append(Name) + for member in self._supported_data_members: + if arCheckMember(open(self.filename), member): + try: + apt_inst.debExtract(open(self.filename), extract_cb, member) + break + except SystemError, e: + return [_("List of files for '%s'could not be read" % self.filename)] + return files + filelist = property(filelist) + + + +if __name__ == "__main__": + import sys + + d = DebPackage(sys.argv[1]) + print d["Section"] + print d["Maintainer"] + print "Files:" + print "\n".join(d.filelist) + |
