136 |
137 |
137 EXTRACTION_ERRORS = (ExtractorError, ExtractorUnusable, OSError, IOError) |
138 EXTRACTION_ERRORS = (ExtractorError, ExtractorUnusable, OSError, IOError) |
138 |
139 |
139 class BaseExtractor(object): |
140 class BaseExtractor(object): |
140 decoders = {'bzip2': 'bzcat', 'gzip': 'zcat', 'compress': 'zcat', |
141 decoders = {'bzip2': 'bzcat', 'gzip': 'zcat', 'compress': 'zcat', |
141 'lzma': 'lzcat'} |
142 'lzma': 'lzcat', 'xz': 'xzcat'} |
142 name_checker = DirectoryChecker |
143 name_checker = DirectoryChecker |
143 |
144 |
144 def __init__(self, filename, encoding): |
145 def __init__(self, filename, encoding): |
145 if encoding and (not self.decoders.has_key(encoding)): |
146 if encoding and (not self.decoders.has_key(encoding)): |
146 raise ValueError("unrecognized encoding %s" % (encoding,)) |
147 raise ValueError("unrecognized encoding %s" % (encoding,)) |
882 extension_map.setdefault(extension, []).append((ext_name, None)) |
883 extension_map.setdefault(extension, []).append((ext_name, None)) |
883 |
884 |
884 for mapping in (('tar', 'bzip2', 'tar.bz2', 'tbz2', 'tb2', 'tbz'), |
885 for mapping in (('tar', 'bzip2', 'tar.bz2', 'tbz2', 'tb2', 'tbz'), |
885 ('tar', 'gzip', 'tar.gz', 'tgz'), |
886 ('tar', 'gzip', 'tar.gz', 'tgz'), |
886 ('tar', 'lzma', 'tar.lzma', 'tlz'), |
887 ('tar', 'lzma', 'tar.lzma', 'tlz'), |
|
888 ('tar', 'xz', 'tar.xz'), |
887 ('tar', 'compress', 'tar.Z', 'taz'), |
889 ('tar', 'compress', 'tar.Z', 'taz'), |
888 ('compress', 'gzip', 'Z', 'gz'), |
890 ('compress', 'gzip', 'Z', 'gz'), |
889 ('compress', 'bzip2', 'bz2'), |
891 ('compress', 'bzip2', 'bz2'), |
890 ('compress', 'lzma', 'lzma')): |
892 ('compress', 'lzma', 'lzma'), |
|
893 ('compress', 'xz', 'xz')): |
891 for extension in mapping[2:]: |
894 for extension in mapping[2:]: |
892 extension_map.setdefault(extension, []).append(mapping[:2]) |
895 extension_map.setdefault(extension, []).append(mapping[:2]) |
893 |
896 |
894 magic_encoding_map = {} |
897 magic_encoding_map = {} |
895 for mapping in (('bzip2', 'bzip2 compressed'), |
898 for mapping in (('bzip2', 'bzip2 compressed'), |
896 ('gzip', 'gzip compressed'), |
899 ('gzip', 'gzip compressed'), |
897 ('lzma', 'LZMA compressed')): |
900 ('lzma', 'LZMA compressed'), |
|
901 ('xz', 'xz compressed')): |
898 for pattern in mapping[1:]: |
902 for pattern in mapping[1:]: |
899 magic_encoding_map[re.compile(pattern)] = mapping[0] |
903 magic_encoding_map[re.compile(pattern)] = mapping[0] |
900 |
904 |
901 def __init__(self, filename, options): |
905 def __init__(self, filename, options): |
902 self.filename = filename |
906 self.filename = filename |