def archive_mime_type(path): """Return the archive type of <path> or None for non-archives.""" try: if os.path.isfile(path): if not os.access(path, os.R_OK): return None if zipfile.is_zipfile(path): if zip.is_py_supported_zipfile(path): return constants.ZIP else: return constants.ZIP_EXTERNAL fd = open(path, 'rb') magic = fd.read(5) fd.close() try: istarfile = tarfile.is_tarfile(path) except IOError: # Tarfile raises an error when accessing certain network shares istarfile = False if istarfile and os.path.getsize(path) > 0: if magic.startswith('BZh'): return constants.BZIP2 elif magic.startswith('\037\213'): return constants.GZIP else: return constants.TAR if magic[0:4] == 'Rar!': return constants.RAR if magic[0:4] == '7z\xBC\xAF': return constants.SEVENZIP # Headers for TAR-XZ and TAR-LZMA that aren't supported by tarfile if magic[0:5] == '\xFD7zXZ' or magic[0:5] == ']\x00\x00\x80\x00': return constants.SEVENZIP if magic[2:4] == '-l': return constants.LHA if magic[0:4] == '%PDF': return constants.PDF except Exception: log.warning(_('! Could not read %s'), path) return None
def archive_mime_type(path): """Return the archive type of <path> or None for non-archives.""" try: if os.path.isfile(path): if not os.access(path, os.R_OK): return None if zipfile.is_zipfile(path): if zip.is_py_supported_zipfile(path): return constants.ZIP else: return constants.ZIP_EXTERNAL fd = open(path, 'rb') magic = fd.read(5) fd.close() try: istarfile = tarfile.is_tarfile(path) except IOError: # Tarfile raises an error when accessing certain network shares istarfile = False if istarfile and os.path.getsize(path) > 0: if magic.startswith('BZh'): return constants.BZIP2 elif magic.startswith('\037\213'): return constants.GZIP else: return constants.TAR if magic[0:4] == 'Rar!': return constants.RAR if magic[0:4] == '7z\xBC\xAF': return constants.SEVENZIP # Headers for TAR-XZ and TAR-LZMA that aren't supported by tarfile if magic[0:5] == '\xFD7zXZ' or magic[0:5] == ']\x00\x00\x80\x00': return constants.XZ if magic[2:4] == '-l': return constants.LHA if magic[0:4] == '%PDF': return constants.PDF except Exception: log.warning(_('! Could not read %s'), path) return None