up
This commit is contained in:
@@ -1,24 +1,18 @@
|
||||
"""Utilities for extracting common archive formats"""
|
||||
|
||||
import contextlib
|
||||
import os
|
||||
import posixpath
|
||||
import shutil
|
||||
import tarfile
|
||||
import zipfile
|
||||
import tarfile
|
||||
import os
|
||||
import shutil
|
||||
import posixpath
|
||||
import contextlib
|
||||
from distutils.errors import DistutilsError
|
||||
|
||||
from ._path import ensure_directory
|
||||
|
||||
from distutils.errors import DistutilsError
|
||||
|
||||
__all__ = [
|
||||
"unpack_archive",
|
||||
"unpack_zipfile",
|
||||
"unpack_tarfile",
|
||||
"default_filter",
|
||||
"UnrecognizedFormat",
|
||||
"extraction_drivers",
|
||||
"unpack_directory",
|
||||
"unpack_archive", "unpack_zipfile", "unpack_tarfile", "default_filter",
|
||||
"UnrecognizedFormat", "extraction_drivers", "unpack_directory",
|
||||
]
|
||||
|
||||
|
||||
@@ -32,8 +26,8 @@ def default_filter(src, dst):
|
||||
|
||||
|
||||
def unpack_archive(
|
||||
filename, extract_dir, progress_filter=default_filter, drivers=None
|
||||
) -> None:
|
||||
filename, extract_dir, progress_filter=default_filter,
|
||||
drivers=None):
|
||||
"""Unpack `filename` to `extract_dir`, or raise ``UnrecognizedFormat``
|
||||
|
||||
`progress_filter` is a function taking two arguments: a source path
|
||||
@@ -62,16 +56,18 @@ def unpack_archive(
|
||||
else:
|
||||
return
|
||||
else:
|
||||
raise UnrecognizedFormat(f"Not a recognized archive type: {filename}")
|
||||
raise UnrecognizedFormat(
|
||||
"Not a recognized archive type: %s" % filename
|
||||
)
|
||||
|
||||
|
||||
def unpack_directory(filename, extract_dir, progress_filter=default_filter) -> None:
|
||||
""" "Unpack" a directory, using the same interface as for archives
|
||||
def unpack_directory(filename, extract_dir, progress_filter=default_filter):
|
||||
""""Unpack" a directory, using the same interface as for archives
|
||||
|
||||
Raises ``UnrecognizedFormat`` if `filename` is not a directory
|
||||
"""
|
||||
if not os.path.isdir(filename):
|
||||
raise UnrecognizedFormat(f"{filename} is not a directory")
|
||||
raise UnrecognizedFormat("%s is not a directory" % filename)
|
||||
|
||||
paths = {
|
||||
filename: ('', extract_dir),
|
||||
@@ -92,7 +88,7 @@ def unpack_directory(filename, extract_dir, progress_filter=default_filter) -> N
|
||||
shutil.copystat(f, target)
|
||||
|
||||
|
||||
def unpack_zipfile(filename, extract_dir, progress_filter=default_filter) -> None:
|
||||
def unpack_zipfile(filename, extract_dir, progress_filter=default_filter):
|
||||
"""Unpack zip `filename` to `extract_dir`
|
||||
|
||||
Raises ``UnrecognizedFormat`` if `filename` is not a zipfile (as determined
|
||||
@@ -101,7 +97,7 @@ def unpack_zipfile(filename, extract_dir, progress_filter=default_filter) -> Non
|
||||
"""
|
||||
|
||||
if not zipfile.is_zipfile(filename):
|
||||
raise UnrecognizedFormat(f"{filename} is not a zip file")
|
||||
raise UnrecognizedFormat("%s is not a zip file" % (filename,))
|
||||
|
||||
with zipfile.ZipFile(filename) as z:
|
||||
_unpack_zipfile_obj(z, extract_dir, progress_filter)
|
||||
@@ -140,8 +136,7 @@ def _unpack_zipfile_obj(zipfile_obj, extract_dir, progress_filter=default_filter
|
||||
def _resolve_tar_file_or_dir(tar_obj, tar_member_obj):
|
||||
"""Resolve any links and extract link targets as normal files."""
|
||||
while tar_member_obj is not None and (
|
||||
tar_member_obj.islnk() or tar_member_obj.issym()
|
||||
):
|
||||
tar_member_obj.islnk() or tar_member_obj.issym()):
|
||||
linkpath = tar_member_obj.linkname
|
||||
if tar_member_obj.issym():
|
||||
base = posixpath.dirname(tar_member_obj.name)
|
||||
@@ -149,8 +144,9 @@ def _resolve_tar_file_or_dir(tar_obj, tar_member_obj):
|
||||
linkpath = posixpath.normpath(linkpath)
|
||||
tar_member_obj = tar_obj._getmember(linkpath)
|
||||
|
||||
is_file_or_dir = tar_member_obj is not None and (
|
||||
tar_member_obj.isfile() or tar_member_obj.isdir()
|
||||
is_file_or_dir = (
|
||||
tar_member_obj is not None and
|
||||
(tar_member_obj.isfile() or tar_member_obj.isdir())
|
||||
)
|
||||
if is_file_or_dir:
|
||||
return tar_member_obj
|
||||
@@ -187,7 +183,7 @@ def _iter_open_tar(tar_obj, extract_dir, progress_filter):
|
||||
yield member, final_dst
|
||||
|
||||
|
||||
def unpack_tarfile(filename, extract_dir, progress_filter=default_filter) -> bool:
|
||||
def unpack_tarfile(filename, extract_dir, progress_filter=default_filter):
|
||||
"""Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir`
|
||||
|
||||
Raises ``UnrecognizedFormat`` if `filename` is not a tarfile (as determined
|
||||
@@ -198,13 +194,11 @@ def unpack_tarfile(filename, extract_dir, progress_filter=default_filter) -> boo
|
||||
tarobj = tarfile.open(filename)
|
||||
except tarfile.TarError as e:
|
||||
raise UnrecognizedFormat(
|
||||
f"{filename} is not a compressed or uncompressed tar file"
|
||||
"%s is not a compressed or uncompressed tar file" % (filename,)
|
||||
) from e
|
||||
|
||||
for member, final_dst in _iter_open_tar(
|
||||
tarobj,
|
||||
extract_dir,
|
||||
progress_filter,
|
||||
tarobj, extract_dir, progress_filter,
|
||||
):
|
||||
try:
|
||||
# XXX Ugh
|
||||
|
||||
Reference in New Issue
Block a user