summaryrefslogtreecommitdiff
path: root/lib/parser.py
diff options
context:
space:
mode:
authorjvoisin2011-06-23 19:00:44 +0200
committerjvoisin2011-06-23 19:00:44 +0200
commite163520a130145496ceeeeeb94d950f17e7fd76e (patch)
tree19d9bcfbc997f5884ea798f8edeaaad8da18915d /lib/parser.py
parent9e69adbe1b065707f8be4f146cc3c05660cef711 (diff)
Implementation of the --backup option, to keep a backup of the treated file (disabled by default)
Diffstat (limited to 'lib/parser.py')
-rw-r--r--lib/parser.py28
1 files changed, 27 insertions, 1 deletions
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 '''