summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/mat.py10
-rw-r--r--lib/misc.py5
-rw-r--r--lib/parser.py28
3 files changed, 37 insertions, 6 deletions
diff --git a/lib/mat.py b/lib/mat.py
index a9b8e17..6abcd64 100644
--- a/lib/mat.py
+++ b/lib/mat.py
@@ -14,7 +14,7 @@ import hachoir_editor
14import images 14import images
15import audio 15import audio
16import misc 16import misc
17import archive 17#import archive
18 18
19__version__ = "0.1" 19__version__ = "0.1"
20__author__ = "jvoisin" 20__author__ = "jvoisin"
@@ -24,10 +24,10 @@ strippers = {
24 hachoir_parser.image.PngFile: images.PngStripper, 24 hachoir_parser.image.PngFile: images.PngStripper,
25 hachoir_parser.audio.MpegAudioFile: audio.MpegAudioStripper, 25 hachoir_parser.audio.MpegAudioFile: audio.MpegAudioStripper,
26 hachoir_parser.misc.PDFDocument: misc.PdfStripper, 26 hachoir_parser.misc.PDFDocument: misc.PdfStripper,
27 hachoir_parser.archive.TarFile: archive.TarStripper, 27 #hachoir_parser.archive.TarFile: archive.TarStripper,
28} 28}
29 29
30def create_class_file(name): 30def create_class_file(name, backup):
31 ''' 31 '''
32 return a $FILETYPEStripper() class, 32 return a $FILETYPEStripper() class,
33 corresponding to the filetype of the given file 33 corresponding to the filetype of the given file
@@ -57,5 +57,5 @@ def create_class_file(name):
57 print("Don't have stripper for file type: %s" % editor.description) 57 print("Don't have stripper for file type: %s" % editor.description)
58 sys.exit(1) 58 sys.exit(1)
59 if editor.input.__class__ == hachoir_parser.misc.PDFDocument: 59 if editor.input.__class__ == hachoir_parser.misc.PDFDocument:
60 return stripper_class(filename) 60 return stripper_class(filename, backup)
61 return stripper_class(realname, filename, parser, editor) 61 return stripper_class(realname, filename, parser, editor, backup)
diff --git a/lib/misc.py b/lib/misc.py
index 56c2274..a8070f1 100644
--- a/lib/misc.py
+++ b/lib/misc.py
@@ -1,5 +1,6 @@
1import parser 1import parser
2import pdfrw 2import pdfrw
3import shutil
3 4
4class PdfStripper(parser.Generic_parser): 5class PdfStripper(parser.Generic_parser):
5 ''' 6 '''
@@ -23,6 +24,10 @@ class PdfStripper(parser.Generic_parser):
23 24
24 self.writer.trailer = self.trailer 25 self.writer.trailer = self.trailer
25 self.writer.write(self.filename + parser.POSTFIX) 26 self.writer.write(self.filename + parser.POSTFIX)
27 if self.backup is False:
28 self.secure_remove() #remove the old file
29 shutil.rename(self.filename+ POSTFIX, self.filename)#rename the new
30
26 31
27 def is_clean(self): 32 def is_clean(self):
28 ''' 33 '''
diff --git a/lib/parser.py b/lib/parser.py
index 1084de5..d629619 100644
--- a/lib/parser.py
+++ b/lib/parser.py
@@ -6,15 +6,27 @@ import hachoir_core.error
6import hachoir_parser 6import hachoir_parser
7import hachoir_editor 7import hachoir_editor
8import sys 8import sys
9import shutil
9 10
10POSTFIX = ".cleaned" 11POSTFIX = ".cleaned"
11 12
12class Generic_parser(): 13class Generic_parser():
13 def __init__(self, realname, filename, parser, editor): 14 def __init__(self, realname, filename, parser, editor, backup):
14 self.filename = filename 15 self.filename = filename
15 self.realname = realname 16 self.realname = realname
16 self.parser = parser 17 self.parser = parser
17 self.editor = editor 18 self.editor = editor
19 self.backup = backup
20
21 def secure_remove(self):
22 '''
23 securely remove the file
24 '''
25 #FIXME : not secure at all !
26 try:
27 shutil.rmtree(self.filename)
28 except:
29 print('Unable to remove %s' % self.filename)
18 30
19 def is_clean(self): 31 def is_clean(self):
20 ''' 32 '''
@@ -33,6 +45,20 @@ class Generic_parser():
33 if self._should_remove(field): 45 if self._should_remove(field):
34 self._remove(field) 46 self._remove(field)
35 hachoir_core.field.writeIntoFile(self.editor, self.filename + POSTFIX) 47 hachoir_core.field.writeIntoFile(self.editor, self.filename + POSTFIX)
48 if self.backup is False:
49 self.secure_remove() #remove the old file
50 shutil.rename(self.filename+ POSTFIX, self.filename)#rename the new
51
52 def remove_all_ugly(self):
53 '''
54 If the remove_all() is not efficient enough,
55 this method is implemented :
56 It is efficient, but destructive.
57 In a perfect world, with nice fileformat,
58 this method does not exist.
59 '''
60 raise NotImplementedError()
61
36 62
37 def _remove(self, field): 63 def _remove(self, field):
38 ''' 64 '''