def extract_to_temp(
file: FileStorage,
ignore_filter: IgnoreFilterManager,
handle_ignore: IgnoreHandling = IgnoreHandling.keep
) -> str:
"""Extracts the contents of file into a temporary directory.
:param file: The archive to extract.
:param ignore_filter: The files and directories that should be ignored.
:param handle_ignore: Determines how ignored files should be handled.
:returns: The pathname of the new temporary directory.
"""
tmpfd, tmparchive = tempfile.mkstemp()
try:
os.remove(tmparchive)
tmparchive += os.path.basename(
secure_filename('archive_' + file.filename)
)
tmpdir = tempfile.mkdtemp()
file.save(tmparchive)
if handle_ignore == IgnoreHandling.error:
arch = archive.Archive(tmparchive)
wrong_files = ignore_filter.get_ignored_files_in_archive(arch)
if wrong_files:
raise IgnoredFilesException(invalid_files=wrong_files)
arch.extract(to_path=tmpdir, method='safe')
else:
archive.extract(tmparchive, to_path=tmpdir, method='safe')
if handle_ignore == IgnoreHandling.delete:
ignore_filter.delete_from_dir(tmpdir)
finally:
os.close(tmpfd)
os.remove(tmparchive)
return tmpdir
评论列表
文章目录