From: Michael Tremer Date: Sun, 6 Mar 2011 10:49:26 +0000 (+0100) Subject: Add forgotten file. X-Git-Tag: 0.9.3~94^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=14db6b6ac25ac7c598a97f6ca70cd8b66234a251;p=pakfire.git Add forgotten file. --- diff --git a/pakfire/compress.py b/pakfire/compress.py new file mode 100644 index 000000000..779e3179c --- /dev/null +++ b/pakfire/compress.py @@ -0,0 +1,84 @@ +#!/usr/bin/python + +import lzma +import os +import progressbar +import zlib + +from constants import * + +PROGRESS_WIDGETS = [ + progressbar.Bar(left="[", right="]"), + " ", + progressbar.Percentage(), + " ", + progressbar.ETA(), + " ", +] + + +def __compress_helper(filename, comp, flush, progress=None): + if progress: + widgets = [ "%-30s " % os.path.basename(filename)] + PROGRESS_WIDGETS + + maxval = os.path.getsize(filename) + + progress = progressbar.ProgressBar( + widgets=widgets, + maxval=maxval, + term_width=80, + ) + + progress.start() + + i = open(filename) + os.unlink(filename) + + o = open(filename, "w") + + size = 0 + buf = i.read(BUFFER_SIZE) + while buf: + if progress: + size += len(buf) + progress.update(size) + + o.write(comp(buf)) + + buf = i.read(BUFFER_SIZE) + + o.write(flush()) + + i.close() + o.close() + + if progress: + progress.finish() + + +def compress(filename, algo="xz", progress=None): + comp = None + if algo == "xz": + comp = lzma.LZMACompressor() + + elif algo == "zlib": + comp = zlib.compressobj(9) + + return __compress_helper(filename, comp.compress, comp.flush, + progress=progress) + + +def decompress(filename, algo="xz", progress=None): + comp = None + if algo == "xz": + comp = lzma.LZMADecompressor() + + elif algo == "zlib": + comp = zlib.decompressobj(9) + + return __compress_helper(filename, comp.decompress, comp.flush, + progress=progress) + + +if __name__ == "__main__": + decompress("test.img", progress=True)