]> git.ipfire.org Git - pakfire.git/commitdiff
Add forgotten file.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 6 Mar 2011 10:49:26 +0000 (11:49 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 6 Mar 2011 10:49:26 +0000 (11:49 +0100)
pakfire/compress.py [new file with mode: 0644]

diff --git a/pakfire/compress.py b/pakfire/compress.py
new file mode 100644 (file)
index 0000000..779e317
--- /dev/null
@@ -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)