mirror of
https://github.com/lutris/lutris
synced 2024-10-14 11:42:36 +00:00
Dispatch extraction methods with 7zip support
This commit is contained in:
parent
8ecb8a7c90
commit
64e35aedcb
|
@ -28,7 +28,9 @@ def is_7zip_supported(path, extractor):
|
||||||
|
|
||||||
def extract_archive(path, to_directory='.', merge_single=True, extractor=None):
|
def extract_archive(path, to_directory='.', merge_single=True, extractor=None):
|
||||||
path = os.path.abspath(path)
|
path = os.path.abspath(path)
|
||||||
|
mode = None
|
||||||
logger.debug("Extracting %s to %s", path, to_directory)
|
logger.debug("Extracting %s to %s", path, to_directory)
|
||||||
|
|
||||||
if(path.endswith('.tar.gz') or path.endswith('.tgz')
|
if(path.endswith('.tar.gz') or path.endswith('.tgz')
|
||||||
or extractor == 'tgz'):
|
or extractor == 'tgz'):
|
||||||
opener, mode = tarfile.open, 'r:gz'
|
opener, mode = tarfile.open, 'r:gz'
|
||||||
|
@ -39,7 +41,7 @@ def extract_archive(path, to_directory='.', merge_single=True, extractor=None):
|
||||||
or extractor == 'bz2'):
|
or extractor == 'bz2'):
|
||||||
opener, mode = tarfile.open, 'r:bz2'
|
opener, mode = tarfile.open, 'r:bz2'
|
||||||
elif(is_7zip_supported(path, extractor)):
|
elif(is_7zip_supported(path, extractor)):
|
||||||
opener = extract_7zip
|
opener = '7zip'
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
"Could not extract `%s` as no appropriate extractor is found"
|
"Could not extract `%s` as no appropriate extractor is found"
|
||||||
|
@ -47,9 +49,7 @@ def extract_archive(path, to_directory='.', merge_single=True, extractor=None):
|
||||||
)
|
)
|
||||||
temp_name = ".extract-" + str(uuid.uuid4())[:8]
|
temp_name = ".extract-" + str(uuid.uuid4())[:8]
|
||||||
temp_path = temp_dir = os.path.join(to_directory, temp_name)
|
temp_path = temp_dir = os.path.join(to_directory, temp_name)
|
||||||
handler = opener(path, mode)
|
_do_extract(path, temp_path, opener, mode)
|
||||||
handler.extractall(temp_path)
|
|
||||||
handler.close()
|
|
||||||
if merge_single:
|
if merge_single:
|
||||||
extracted = os.listdir(temp_path)
|
extracted = os.listdir(temp_path)
|
||||||
if len(extracted) == 1:
|
if len(extracted) == 1:
|
||||||
|
@ -81,6 +81,15 @@ def extract_archive(path, to_directory='.', merge_single=True, extractor=None):
|
||||||
return (path, to_directory)
|
return (path, to_directory)
|
||||||
|
|
||||||
|
|
||||||
|
def _do_extract(archive, dest, opener, mode=None):
|
||||||
|
if opener == '7zip':
|
||||||
|
extract_7zip(archive, dest)
|
||||||
|
else:
|
||||||
|
handler = opener(archive, mode)
|
||||||
|
handler.extractall(dest)
|
||||||
|
handler.close()
|
||||||
|
|
||||||
|
|
||||||
def decompress_gz(file_path, dest_path=None):
|
def decompress_gz(file_path, dest_path=None):
|
||||||
"""Decompress a gzip file."""
|
"""Decompress a gzip file."""
|
||||||
if dest_path:
|
if dest_path:
|
||||||
|
|
Loading…
Reference in a new issue