11# Licensed under a 3-clause BSD style license - see LICENSE.rst
22from __future__ import print_function
3- import subprocess
43import os
54
6-
75# Import DEVNULL for py3 or py3
86try :
97 from subprocess import DEVNULL
1210
1311# Check availability of some system tools
1412# Exceptions are raised if not found
15- __is_gzip_found = False
16- for test_cmd in (["gzip" , "-V" ], ["7z" ]):
17- try :
18- subprocess .call (test_cmd , stdout = DEVNULL , stderr = DEVNULL )
19- except OSError :
20- pass
21- else :
22- __is_gzip_found = test_cmd [0 ]
23-
24-
25- if __is_gzip_found == 'gzip' :
26- def _unzip_cmd (filename ):
27- return ["gzip" , "-d" , "{0}" .format (filename )]
28- elif __is_gzip_found == '7z' :
29- def _unzip_cmd (filename ):
30- return ["7z" , "x" ,
31- "{0}" .format (filename ),
32- "-o{0}" .format (os .path .split (filename )[0 ])]
33- else :
34- print ("gzip was not found on your system! You should solve this issue for "
35- "astroquery.eso to be at its best!\n "
36- "On POSIX system: make sure gzip is installed and in your path!"
37- "On Windows: same for 7-zip (http://www.7-zip.org)!" )
3813
3914
4015def gunzip (filename ):
@@ -50,9 +25,17 @@ def gunzip(filename):
5025 Name of the decompressed file (or input filename if gzip is not
5126 available).
5227 """
28+ import shutil
29+ import gzip
30+
31+ # system-wide 'gzip' was removed, Python gzip used instead.
32+ # See #1538 : https://github.com/astropy/astroquery/issues/1538
33+
5334 # ".fz" denotes RICE rather than gzip compression
54- if __is_gzip_found and not filename .endswith ('.fz' ):
55- subprocess .call (_unzip_cmd (filename ), stdout = DEVNULL , stderr = DEVNULL )
35+ if not filename .endswith ('.fz' ):
36+ with gzip .open (filename , 'rb' ) as f_in :
37+ with open (filename .rsplit ("." , 1 )[0 ], 'wb' ) as f_out :
38+ shutil .copyfileobj (f_in , f_out )
5639 return filename .rsplit ("." , 1 )[0 ]
5740 else :
5841 return filename
0 commit comments