Code cleanup: remove CompressionPrograms map.
This commit is contained in:
parent
0f976ef02a
commit
b3b48adf39
|
@ -23,8 +23,8 @@ ArchiveCommands = ('list', 'extract', 'test', 'create')
|
||||||
|
|
||||||
# Supported archive formats
|
# Supported archive formats
|
||||||
ArchiveFormats = ('7z', 'ace', 'alzip', 'ar', 'arc', 'arj', 'bzip2',
|
ArchiveFormats = ('7z', 'ace', 'alzip', 'ar', 'arc', 'arj', 'bzip2',
|
||||||
'cab', 'compress', 'cpio', 'deb', 'dms', 'gzip', 'lrzip', 'lzh', 'lzip', 'lzma',
|
'cab', 'compress', 'cpio', 'deb', 'dms', 'gzip', 'lrzip', 'lzh',
|
||||||
'lzop', 'rar', 'rpm', 'rzip', 'tar', 'xz', 'zip', 'zoo')
|
'lzip', 'lzma', 'lzop', 'rar', 'rpm', 'rzip', 'tar', 'xz', 'zip', 'zoo')
|
||||||
|
|
||||||
# Supported compressions (used with tar for example)
|
# Supported compressions (used with tar for example)
|
||||||
# Note that all compressions must also be archive formats
|
# Note that all compressions must also be archive formats
|
||||||
|
@ -65,17 +65,6 @@ ArchiveMimetypes = {
|
||||||
'application/x-dms': 'dms',
|
'application/x-dms': 'dms',
|
||||||
}
|
}
|
||||||
|
|
||||||
# List of programs supporting the given compression
|
|
||||||
|
|
||||||
CompressionPrograms = {
|
|
||||||
'gzip': ('pigz', 'gzip'),
|
|
||||||
'bzip2': ('pbzip2', 'lbzip2', 'bzip2'),
|
|
||||||
'compress': ('compress',),
|
|
||||||
'lzma': ('lzma',),
|
|
||||||
'xz': ('xz',),
|
|
||||||
'lzip': ('lzip', 'clzip', 'plzip', 'pdlzip'),
|
|
||||||
}
|
|
||||||
|
|
||||||
# List of programs supporting the given archive format and command.
|
# List of programs supporting the given archive format and command.
|
||||||
# If command is None, the program supports all commands (list, extract, ...)
|
# If command is None, the program supports all commands (list, extract, ...)
|
||||||
# Programs starting with "py_" are Python modules.
|
# Programs starting with "py_" are Python modules.
|
||||||
|
@ -268,17 +257,16 @@ def find_archive_program (format, command):
|
||||||
raise util.PatoolError("could not find an executable program to %s format %s; candidates are (%s)," % (command, format, ",".join(programs)))
|
raise util.PatoolError("could not find an executable program to %s format %s; candidates are (%s)," % (command, format, ",".join(programs)))
|
||||||
|
|
||||||
|
|
||||||
def find_compression_program (program, compression):
|
def program_supports_compression (program, compression):
|
||||||
"""Find suitable compression program and return it. Returns None if
|
"""Decide if the given program supports the compression natively.
|
||||||
no compression program could be found"""
|
@return: True iff the program supports the given compression format
|
||||||
if program in ('tar', 'star'):
|
natively, else False.
|
||||||
for enc_program in CompressionPrograms[compression]:
|
"""
|
||||||
found = util.find_program(enc_program)
|
if program == 'py_tarfile':
|
||||||
if found:
|
|
||||||
return found
|
|
||||||
elif program == 'py_tarfile':
|
|
||||||
return compression in ('gzip', 'bzip2')
|
return compression in ('gzip', 'bzip2')
|
||||||
return None
|
if program in ('tar', 'star'):
|
||||||
|
return compression in ('gzip', 'bzip2', 'xz', 'lzma')
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def list_formats ():
|
def list_formats ():
|
||||||
|
@ -339,10 +327,17 @@ def parse_config (archive, format, compression, command, **kwargs):
|
||||||
value = program
|
value = program
|
||||||
config[key] = value
|
config[key] = value
|
||||||
program = os.path.basename(config['program'])
|
program = os.path.basename(config['program'])
|
||||||
if compression and not find_compression_program(program, compression):
|
if compression:
|
||||||
msg = "cannot %s archive `%s': compression `%s' not supported by %s" % \
|
# check if compression is supported
|
||||||
(command, archive, compression, program)
|
if not program_supports_compression(program, compression):
|
||||||
raise util.PatoolError(msg)
|
if command == 'create':
|
||||||
|
comp_command = command
|
||||||
|
else:
|
||||||
|
comp_command = 'extract'
|
||||||
|
comp_prog = find_archive_program(compression, comp_command)
|
||||||
|
if not comp_prog:
|
||||||
|
msg = "cannot %s archive `%s': compression `%s' not supported"
|
||||||
|
raise util.PatoolError(msg % (command, archive, compression))
|
||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -174,4 +174,4 @@ def has_codec (program, codec):
|
||||||
"""Test if program supports given codec."""
|
"""Test if program supports given codec."""
|
||||||
if program == '7z' and codec == 'rar':
|
if program == '7z' and codec == 'rar':
|
||||||
return patoolib.util.p7zip_supports_rar()
|
return patoolib.util.p7zip_supports_rar()
|
||||||
return patoolib.find_compression_program(program, codec)
|
return patoolib.program_supports_compression(program, codec)
|
||||||
|
|
|
@ -28,7 +28,8 @@ class TestArchives (ArchiveTest):
|
||||||
self.archive_commands('t.tar.gz')
|
self.archive_commands('t.tar.gz')
|
||||||
self.archive_commands('t.tgz')
|
self.archive_commands('t.tgz')
|
||||||
|
|
||||||
@needs_codec('tar', 'compress')
|
@needs_program('tar')
|
||||||
|
@needs_program('compress')
|
||||||
def test_tar_z (self):
|
def test_tar_z (self):
|
||||||
self.program = 'tar'
|
self.program = 'tar'
|
||||||
self.archive_commands('t.tar.Z')
|
self.archive_commands('t.tar.Z')
|
||||||
|
@ -47,8 +48,8 @@ class TestArchives (ArchiveTest):
|
||||||
|
|
||||||
# even though clzip would support extracting .lz files, the
|
# even though clzip would support extracting .lz files, the
|
||||||
# file(1) --uncompress command does not use it for achive detection
|
# file(1) --uncompress command does not use it for achive detection
|
||||||
|
@needs_program('tar')
|
||||||
@needs_program('lzip')
|
@needs_program('lzip')
|
||||||
@needs_codec('tar', 'lzip')
|
|
||||||
def test_tar_lzip (self):
|
def test_tar_lzip (self):
|
||||||
self.program = 'tar'
|
self.program = 'tar'
|
||||||
self.archive_commands('t.tar.lz')
|
self.archive_commands('t.tar.lz')
|
||||||
|
@ -69,7 +70,8 @@ class TestArchives (ArchiveTest):
|
||||||
self.archive_commands('t.tar.gz')
|
self.archive_commands('t.tar.gz')
|
||||||
self.archive_commands('t.tgz')
|
self.archive_commands('t.tgz')
|
||||||
|
|
||||||
@needs_codec('star', 'compress')
|
@needs_program('star')
|
||||||
|
@needs_program('compress')
|
||||||
def test_star_z (self):
|
def test_star_z (self):
|
||||||
self.program = 'star'
|
self.program = 'star'
|
||||||
self.archive_commands('t.tar.Z')
|
self.archive_commands('t.tar.Z')
|
||||||
|
@ -86,7 +88,8 @@ class TestArchives (ArchiveTest):
|
||||||
self.program = 'star'
|
self.program = 'star'
|
||||||
self.archive_commands('t.tar.lzma')
|
self.archive_commands('t.tar.lzma')
|
||||||
|
|
||||||
@needs_codec('star', 'lzip')
|
@needs_program('star')
|
||||||
|
@needs_program('lzip')
|
||||||
def test_star_lzip (self):
|
def test_star_lzip (self):
|
||||||
self.program = 'star'
|
self.program = 'star'
|
||||||
self.archive_commands('t.tar.lz')
|
self.archive_commands('t.tar.lz')
|
||||||
|
|
|
@ -33,8 +33,8 @@ class TestConfiguration (unittest.TestCase):
|
||||||
self.assertTrue(command in patoolib.ArchiveCommands)
|
self.assertTrue(command in patoolib.ArchiveCommands)
|
||||||
|
|
||||||
def test_compression_programs (self):
|
def test_compression_programs (self):
|
||||||
self.assertEqual(set(patoolib.ArchiveCompressions),
|
self.assertTrue(set(patoolib.ArchiveCompressions).issubset(
|
||||||
set(patoolib.CompressionPrograms.keys()))
|
set(patoolib.ArchiveFormats)))
|
||||||
|
|
||||||
def test_encoding_mimes (self):
|
def test_encoding_mimes (self):
|
||||||
self.assertEqual(set(patoolib.ArchiveCompressions),
|
self.assertEqual(set(patoolib.ArchiveCompressions),
|
||||||
|
|
Loading…
Reference in New Issue