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):
|
||||
path = os.path.abspath(path)
|
||||
mode = None
|
||||
logger.debug("Extracting %s to %s", path, to_directory)
|
||||
|
||||
if(path.endswith('.tar.gz') or path.endswith('.tgz')
|
||||
or extractor == 'tgz'):
|
||||
opener, mode = tarfile.open, 'r:gz'
|
||||
|
@ -39,7 +41,7 @@ def extract_archive(path, to_directory='.', merge_single=True, extractor=None):
|
|||
or extractor == 'bz2'):
|
||||
opener, mode = tarfile.open, 'r:bz2'
|
||||
elif(is_7zip_supported(path, extractor)):
|
||||
opener = extract_7zip
|
||||
opener = '7zip'
|
||||
else:
|
||||
raise RuntimeError(
|
||||
"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_path = temp_dir = os.path.join(to_directory, temp_name)
|
||||
handler = opener(path, mode)
|
||||
handler.extractall(temp_path)
|
||||
handler.close()
|
||||
_do_extract(path, temp_path, opener, mode)
|
||||
if merge_single:
|
||||
extracted = os.listdir(temp_path)
|
||||
if len(extracted) == 1:
|
||||
|
@ -81,6 +81,15 @@ def extract_archive(path, to_directory='.', merge_single=True, extractor=None):
|
|||
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):
|
||||
"""Decompress a gzip file."""
|
||||
if dest_path:
|
||||
|
|
Loading…
Reference in a new issue