mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-30 05:21:55 -06:00
tests/functional: add a generalized uncompress helper
There are many types of compression that the tests deal with, and it makes sense to have a single helper 'uncompress' that can deal with all. Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Message-ID: <20241217155953.3950506-25-berrange@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
5831ed84e7
commit
dd66e65f05
2 changed files with 48 additions and 0 deletions
|
@ -17,3 +17,4 @@ from .decorators import skipIfMissingCommands, skipIfNotMachine, \
|
||||||
skipFlakyTest, skipUntrustedTest, skipBigDataTest, \
|
skipFlakyTest, skipUntrustedTest, skipBigDataTest, \
|
||||||
skipIfMissingImports
|
skipIfMissingImports
|
||||||
from .archive import archive_extract
|
from .archive import archive_extract
|
||||||
|
from .uncompress import uncompress
|
||||||
|
|
|
@ -11,6 +11,9 @@ import gzip
|
||||||
import lzma
|
import lzma
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
from .asset import Asset
|
||||||
|
|
||||||
|
|
||||||
def gzip_uncompress(gz_path, output_path):
|
def gzip_uncompress(gz_path, output_path):
|
||||||
|
@ -34,3 +37,47 @@ def lzma_uncompress(xz_path, output_path):
|
||||||
except:
|
except:
|
||||||
os.remove(output_path)
|
os.remove(output_path)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
'''
|
||||||
|
@params compressed: filename, Asset, or file-like object to uncompress
|
||||||
|
@params uncompressed: filename to uncompress into
|
||||||
|
@params format: optional compression format (gzip, lzma)
|
||||||
|
|
||||||
|
Uncompresses @compressed into @uncompressed
|
||||||
|
|
||||||
|
If @format is None, heuristics will be applied to guess the format
|
||||||
|
from the filename or Asset URL. @format must be non-None if @uncompressed
|
||||||
|
is a file-like object.
|
||||||
|
|
||||||
|
Returns the fully qualified path to the uncompessed file
|
||||||
|
'''
|
||||||
|
def uncompress(compressed, uncompressed, format=None):
|
||||||
|
if format is None:
|
||||||
|
format = guess_uncompress_format(compressed)
|
||||||
|
|
||||||
|
if format == "xz":
|
||||||
|
lzma_uncompress(str(compressed), uncompressed)
|
||||||
|
elif format == "gz":
|
||||||
|
gzip_uncompress(str(compressed), uncompressed)
|
||||||
|
else:
|
||||||
|
raise Exception(f"Unknown compression format {format}")
|
||||||
|
|
||||||
|
'''
|
||||||
|
@params compressed: filename, Asset, or file-like object to guess
|
||||||
|
|
||||||
|
Guess the format of @compressed, raising an exception if
|
||||||
|
no format can be determined
|
||||||
|
'''
|
||||||
|
def guess_uncompress_format(compressed):
|
||||||
|
if type(compressed) == Asset:
|
||||||
|
compressed = urlparse(compressed.url).path
|
||||||
|
elif type(compressed) != str:
|
||||||
|
raise Exception(f"Unable to guess compression cformat for {compressed}")
|
||||||
|
|
||||||
|
(name, ext) = os.path.splitext(compressed)
|
||||||
|
if ext == ".xz":
|
||||||
|
return "xz"
|
||||||
|
elif ext == ".gz":
|
||||||
|
return "gz"
|
||||||
|
else:
|
||||||
|
raise Exception(f"Unknown compression format for {compressed}")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue