Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_no_handler_is_selected_for_a_non_archive(self):
# failed because of libmagic bug: http://bugs.gw.com/view.php?id=467
# passing by introducing strict flag for handlers
test_loc = self.get_test_loc('archive/not_archive/hashfile')
assert [] == list(archive.get_handlers(test_loc))
assert None == archive.get_extractor(test_loc)
assert None == archive.get_extractor(test_loc, kinds=all_kinds)
assert not archive.should_extract(test_loc, kinds=default_kinds)
def test_extract_targz_with_unicode_path_should_extract_without_error(self):
test_file = self.get_test_loc('archive/tgz/tgz_unicode.tgz')
test_dir = self.get_temp_dir()
extractor = archive.get_extractor(test_file)
assert archive.extract_tar == extractor
result = archive.extract_tar(test_file, test_dir)
assert [] == result
assert os.listdir(test_dir)
def test_get_extractor_cab(self):
test_file = self.get_test_loc('archive/cab/basic.cab')
result = archive.get_extractor(test_file)
expected = archive.extract_cab
assert expected == result
def test_extract_can_get_extractor_and_uncompress_dia_files(self):
test_file = self.get_test_loc('archive/dia/guess/infoset-doc.dia')
test_dir = self.get_temp_dir()
archive.get_extractor(test_file)(test_file, test_dir)
result = os.path.join(test_dir, 'infoset-doc.dia-extract')
assert os.path.exists(result)
def test_extract_twice_can_extract_to_relative_paths(self):
# The setup is a tad complex because we want to have a relative dir
# to the base dir where we run tests from, ie the scancode-toolkit/ dir
# To use relative paths, we use our tmp dir at the root of the code tree
from os.path import dirname, join, abspath, exists
import shutil
import tempfile
test_file = self.get_test_loc('archive/rpm/xz-compressed-cpio.rpm')
# this will return an extractor that extracts twice
extractor = archive.get_extractor(test_file)
scancode_root = dirname(dirname(dirname(__file__)))
scancode_tmp = join(scancode_root, 'tmp')
fileutils.create_dir(scancode_tmp)
scancode_root_abs = abspath(scancode_root)
test_src_dir = tempfile.mkdtemp(dir=scancode_tmp).replace(scancode_root_abs, '').strip('\\/')
test_tgt_dir = tempfile.mkdtemp(dir=scancode_tmp).replace(scancode_root_abs, '').strip('\\/')
shutil.copy(test_file, test_src_dir)
test_src_file = join(test_src_dir, 'xz-compressed-cpio.rpm')
result = list(extractor(test_src_file, test_tgt_dir))
assert [] == result
assert exists(join(test_tgt_dir, 'usr/sbin/abrt-dbus'))
def test_extract_twice_with_rpm_with_xz_compressed_cpio(self):
test_file = self.get_test_loc('archive/rpm/xz-compressed-cpio.rpm')
test_dir = self.get_temp_dir()
# this will return an extractor that extracts twice
extractor = archive.get_extractor(test_file)
result = list(extractor(test_file, test_dir))
assert [] == result
expected = [
'etc/abrt/abrt-action-save-package-data.conf',
'etc/abrt/abrt.conf',
'etc/abrt/gpg_keys',
'etc/dbus-1/system.d/dbus-abrt.conf',
'etc/libreport/events.d/abrt_event.conf',
'etc/libreport/events.d/smart_event.conf',
'etc/rc.d/init.d/abrtd',
'usr/bin/abrt-action-save-package-data',
'usr/bin/abrt-handle-upload',
'usr/libexec/abrt-handle-event',
'usr/libexec/abrt1-to-abrt2',
'usr/sbin/abrt-dbus',
'usr/sbin/abrt-server',
def test_get_extractor_cbz(self):
test_file = self.get_test_loc('archive/cbz/t.cbz')
result = archive.get_extractor(test_file)
expected = archive.extract_zip
assert expected == result
def test_no_handler_is_selected_for_a_non_archive2(self):
# FWIW there is a related libmagic bug: http://bugs.gw.com/view.php?id=473
test_loc = self.get_test_loc('archive/not_archive/wildtest.txt')
assert [] == list(archive.get_handlers(test_loc))
assert None == archive.get_extractor(test_loc)
assert None == archive.get_extractor(test_loc, kinds=all_kinds)
assert not archive.should_extract(test_loc, kinds=default_kinds)
def extract_file(location, target, kinds=extractcode.default_kinds, verbose=False):
"""
Extract a single archive at `location` in the `target` directory if it is
of a kind supported in the `kinds` kind tuple.
"""
warnings = []
errors = []
extractor = archive.get_extractor(location, kinds)
if TRACE:
logger.debug('extract_file: extractor: for: %(location)r with kinds: %(kinds)r : ' % locals()
+ getattr(extractor, '__module__', '')
+ '.' + getattr(extractor, '__name__', ''))
if extractor:
yield ExtractEvent(location, target, done=False, warnings=[], errors=[])
try:
# extract first to a temp directory: if there is an error, the
# extracted files will not be moved to target
tmp_tgt = fileutils.get_temp_dir(prefix='scancode-extract-')
abs_location = abspath(expanduser(location))
warns = extractor(abs_location, tmp_tgt) or []
warnings.extend(warns)
fileutils.copytree(tmp_tgt, target)
fileutils.delete(tmp_tgt)
except Exception as e: