From f7082a21d6511c5069fbb9ff186ce22f3e22fed7 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 7 Jun 2011 18:40:44 +0200 Subject: First commit --- lib/mat.py | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 lib/mat.py (limited to 'lib/mat.py') diff --git a/lib/mat.py b/lib/mat.py new file mode 100644 index 0000000..d22c9ab --- /dev/null +++ b/lib/mat.py @@ -0,0 +1,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() -- cgit v1.3