summaryrefslogtreecommitdiff
path: root/lib/mat.py
blob: d22c9abc77e36c2f1d336f71f48edddcefb76c12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import hachoir_core.error
import hachoir_core.cmd_line
import hachoir_parser
import hachoir_metadata

from strippers import *

from hachoir_editor import (createEditor,
    NewFieldSet, EditableInteger, EditableBytes)

import hachoir_editor

import sys

__version__ = "0.1"
__author__ = "jvoisin"


class file():
    def __init__(self, filename):
        self.metadata = {}
        self.clean = False
        self.editor = createEditor(self.parser)
        self.filename = filename
        self.filename, self.realname = hachoir_core.cmd_line.unicodeFilename(
            self.filename), self.filename
        self.parser = hachoir_parser.createParser(self.filename, self.realname)

        if not self.parser:
            print("Unable to parse file : sorry")
            sys.exit(1)

        try:
            self.meta = hachoir_metadata.extractMetadata(self.parser)
        except hachoir_core.error.HachoirError, err:
            print "Metadata extraction error: %s" % unicode(err)
            self.data = None

        if not self.meta:
            print "Unable to extract metadata"
            sys.exit(1)

    def is_clean(self):
        '''
            Return true if the file is clean from any compromizing meta
        '''
        return self.clean

    def remove_all(self):
        '''
            Remove all the files that are compromizing
        '''
        stripEditor(self.editor, self.realname, level, not(values.quiet))
        for key, field in metadata:
            if should_remove(key):
                remove(self, key)

    def remove(self, field):
        '''
            Remove the given file
        '''
        del editor[field]
        return True


    def get_meta(self):
        '''return a dict with all the meta of the file'''
        #FIXME : sooooooooooo dirty !
        for title in self.meta:
            if title.values != []: #if the field is not empty
                value = ""
                for item in title.values:
                    value = item.text
                self.metadata[title.key] = value
        return self.metadata

    def should_remove(self, field):
        '''
            return True if the field is compromizing
            abstract method
        '''
        raise NotImplementedError()

def stripEditor(editor, filename, realname, level, verbose):
    '''
        Assign a stripper to an editor
    '''
    cls = editor.input.__class__
    try:
        stripper_cls = strippers[cls]
    except KeyError:
        print "Don't have stripper for file type: %s" % editor.description
        return False
    stripper = stripper_cls(editor, level, verbose)

    if stripper():
        output = FileOutputStream(filename, realname)
        editor.writeInto(output)

    else:
        print _("Stripper doesn't touch the file")
    return True

file(sys.argv[1]).get_meta()