Completed
Push — master ( 74c045...3a5649 )
by
unknown
01:24
created

get_file_extension()   B

Complexity

Conditions 3

Size

Total Lines 41

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
dl 0
loc 41
rs 8.8571
c 1
b 0
f 0
1
# coding: utf8
2
import magic
3
4
5
def get_file_extension(file_header):
6
    mime_dict = {
7
        'application/epub+zip': 'epub',
8
        'application/zip': 'zip',
9
        'application/x-tar': 'tar',
10
        'application/x-rar-compressed': 'rar',
11
        'application/gzip': 'gz',
12
        'application/x-bzip2': 'bz2',
13
        'application/x-7z-compressed': '7z',
14
        'application/x-xz': 'xz',
15
        'application/pdf': 'pdf',
16
        'application/x-msdownload': 'exe',
17
        'application/x-shockwave-flash': 'swf',
18
        'application/rtf': 'rtf',
19
        'application/octet-stream': 'eot',
20
        'application/postscript': 'ps',
21
        'application/x-sqlite3': 'sqlite',
22
        'application/x-nintendo-nes-rom': 'nes',
23
        'application/x-google-chrome-extension': 'crx',
24
        'application/vnd.ms-cab-compressed': 'cab',
25
        'application/x-deb': 'deb',
26
        'application/x-unix-archive': 'ar',
27
        'application/x-compress': 'Z',
28
        'application/x-lzip': 'lz',
29
    }
30
    mime_type = magic.from_buffer(
31
        file_header,
32
        mime=True
33
    )
34
    try:
35
        if mime_dict[mime_type] == 'gz':
36
            magic_tools = magic.Magic(mime=True, uncompress=True)
37
            mime_type_in_gz = magic_tools.from_buffer(file_header)
38
            file_extension = '%s.%s' % (
39
                mime_dict[mime_type_in_gz], mime_dict[mime_type]
40
            )
41
        else:
42
            file_extension = mime_dict[mime_type]
43
    except KeyError:
44
        file_extension = None
45
    return {'file_extension': file_extension, 'mime_type': mime_type}
46