Package daklib :: Module compress
[hide private]
[frames] | no frames]

Source Code for Module daklib.compress

 1  # Copyright (C) 2015, Ansgar Burchardt <ansgar@debian.org> 
 2  # 
 3  # This program is free software; you can redistribute it and/or modify 
 4  # it under the terms of the GNU General Public License as published by 
 5  # the Free Software Foundation; either version 2 of the License, or 
 6  # (at your option) any later version. 
 7  # 
 8  # This program is distributed in the hope that it will be useful, 
 9  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
10  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
11  # GNU General Public License for more details. 
12  # 
13  # You should have received a copy of the GNU General Public License along 
14  # with this program; if not, write to the Free Software Foundation, Inc., 
15  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 
16   
17  """ 
18  Helper methods to deal with (de)compressing files 
19  """ 
20   
21  import os 
22  import shutil 
23  import subprocess 
24   
25   
26 -def decompress_zstd(input, output):
27 subprocess.check_call(["zstd", "--decompress"], stdin=input, stdout=output)
28 29
30 -def decompress_xz(input, output):
31 subprocess.check_call(["xz", "--decompress"], stdin=input, stdout=output)
32 33
34 -def decompress_bz2(input, output):
35 subprocess.check_call(["bzip2", "--decompress"], stdin=input, stdout=output)
36 37
38 -def decompress_gz(input, output):
39 subprocess.check_call(["gzip", "--decompress"], stdin=input, stdout=output)
40 41 42 decompressors = { 43 '.zst': decompress_zstd, 44 '.xz': decompress_xz, 45 '.bz2': decompress_bz2, 46 '.gz': decompress_gz, 47 } 48 49
50 -def decompress(input, output, filename=None):
51 if filename is None: 52 filename = input.name 53 54 base, ext = os.path.splitext(filename) 55 decompressor = decompressors.get(ext, None) 56 if decompressor is not None: 57 decompressor(input, output) 58 else: 59 shutil.copyfileobj(input, output)
60