diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/archive.py | 29 | ||||
| -rw-r--r-- | lib/mat.py | 11 | ||||
| -rw-r--r-- | lib/parser.py | 4 |
3 files changed, 30 insertions, 14 deletions
diff --git a/lib/archive.py b/lib/archive.py index aa2a47f..c31fac6 100644 --- a/lib/archive.py +++ b/lib/archive.py | |||
| @@ -13,11 +13,12 @@ class GenericArchiveStripper(parser.Generic_parser): | |||
| 13 | ''' | 13 | ''' |
| 14 | Represent a generic archive | 14 | Represent a generic archive |
| 15 | ''' | 15 | ''' |
| 16 | def __init__(self, realname, filename, parser, editor, backup): | 16 | def __init__(self, realname, filename, parser, editor, backup, add2archive): |
| 17 | super(GenericArchiveStripper, self).__init__(realname, | 17 | super(GenericArchiveStripper, self).__init__(realname, |
| 18 | filename, parser, editor, backup) | 18 | filename, parser, editor, backup, add2archive) |
| 19 | self.compression = '' | 19 | self.compression = '' |
| 20 | self.folder_list = [] | 20 | self.folder_list = [] |
| 21 | self.add2archive = add2archive | ||
| 21 | 22 | ||
| 22 | def remove_folder(self): | 23 | def remove_folder(self): |
| 23 | [shutil.rmtree(folder) for folder in self.folder_list] | 24 | [shutil.rmtree(folder) for folder in self.folder_list] |
| @@ -49,13 +50,18 @@ class ZipStripper(GenericArchiveStripper): | |||
| 49 | zipin.extract(item) | 50 | zipin.extract(item) |
| 50 | if os.path.isfile(item.filename): | 51 | if os.path.isfile(item.filename): |
| 51 | try: | 52 | try: |
| 52 | cfile = mat.create_class_file(item.filename, False) | 53 | cfile = mat.create_class_file(item.filename, False, |
| 54 | self.add2archive) | ||
| 53 | cfile.remove_all() | 55 | cfile.remove_all() |
| 54 | logging.debug('Processing %s from %s' % (item.filename, | 56 | logging.debug('Processing %s from %s' % (item.filename, |
| 55 | self.filename)) | 57 | self.filename)) |
| 58 | zipout.write(item.filename) | ||
| 56 | except: | 59 | except: |
| 57 | print('%s\' filefomart is not supported'%item.filename) | 60 | logging.info('%s\' filefomart is not supported' % |
| 58 | zipout.write(item.filename) | 61 | item.filename) |
| 62 | if self.add2archive: | ||
| 63 | zipout.write(item.filename) | ||
| 64 | mat.secure_remove(item.filename) | ||
| 59 | else: | 65 | else: |
| 60 | self.folder_list.insert(0, item.filename) | 66 | self.folder_list.insert(0, item.filename) |
| 61 | logging.info('%s treated' % self.filename) | 67 | logging.info('%s treated' % self.filename) |
| @@ -84,11 +90,15 @@ class TarStripper(GenericArchiveStripper): | |||
| 84 | if current_file.type is '0': #is current_file a regular file ? | 90 | if current_file.type is '0': #is current_file a regular file ? |
| 85 | #no backup file | 91 | #no backup file |
| 86 | try: | 92 | try: |
| 87 | cfile = mat.create_class_file(current_file.name, False) | 93 | cfile = mat.create_class_file(current_file.name, False, |
| 94 | self.add2archive) | ||
| 88 | cfile.remove_all() | 95 | cfile.remove_all() |
| 96 | tarout.add(current_file.name, filter=self._remove) | ||
| 89 | except: | 97 | except: |
| 90 | print('%s\' format is not supported'%current_file.name) | 98 | logging.info('%s\' format is not supported' % |
| 91 | tarout.add(current_file.name, filter=self._remove) | 99 | current_file.name) |
| 100 | if self.add2archive: | ||
| 101 | tarout.add(current_file.name, filter=self._remove) | ||
| 92 | mat.secure_remove(current_file.name) | 102 | mat.secure_remove(current_file.name) |
| 93 | else: | 103 | else: |
| 94 | self.folder_list.insert(0, current_file.name) | 104 | self.folder_list.insert(0, current_file.name) |
| @@ -123,7 +133,8 @@ class TarStripper(GenericArchiveStripper): | |||
| 123 | tarin.extract(current_file) | 133 | tarin.extract(current_file) |
| 124 | if current_file.type is '0': #is current_file a regular file ? | 134 | if current_file.type is '0': #is current_file a regular file ? |
| 125 | #no backup file | 135 | #no backup file |
| 126 | class_file = mat.create_class_file(current_file.name, False) | 136 | class_file = mat.create_class_file(current_file.name, False, |
| 137 | self.add2archive) | ||
| 127 | if not class_file.is_clean():#if the extracted file is not clean | 138 | if not class_file.is_clean():#if the extracted file is not clean |
| 128 | mat.secure_remove(current_file.name) #remove it | 139 | mat.secure_remove(current_file.name) #remove it |
| 129 | self.remove_folder() #remove all the remaining folders | 140 | self.remove_folder() #remove all the remaining folders |
| @@ -52,14 +52,16 @@ def is_secure(filename): | |||
| 52 | 52 | ||
| 53 | if not(os.path.isfile(filename)): #check if the file exist | 53 | if not(os.path.isfile(filename)): #check if the file exist |
| 54 | logging.error("Error: %s is not a valid file" % filename) | 54 | logging.error("Error: %s is not a valid file" % filename) |
| 55 | return | 55 | return False |
| 56 | 56 | ||
| 57 | def create_class_file(name, backup): | 57 | def create_class_file(name, backup, add2archive): |
| 58 | ''' | 58 | ''' |
| 59 | return a $FILETYPEStripper() class, | 59 | return a $FILETYPEStripper() class, |
| 60 | corresponding to the filetype of the given file | 60 | corresponding to the filetype of the given file |
| 61 | ''' | 61 | ''' |
| 62 | is_secure(name) | 62 | if is_secure(name): |
| 63 | print 'a' | ||
| 64 | return | ||
| 63 | 65 | ||
| 64 | filename = "" | 66 | filename = "" |
| 65 | realname = name | 67 | realname = name |
| @@ -83,4 +85,5 @@ def create_class_file(name, backup): | |||
| 83 | return | 85 | return |
| 84 | if editor.input.__class__ == hachoir_parser.misc.PDFDocument: | 86 | if editor.input.__class__ == hachoir_parser.misc.PDFDocument: |
| 85 | return stripper_class(filename, realname, backup) | 87 | return stripper_class(filename, realname, backup) |
| 86 | return stripper_class(realname, filename, parser, editor, backup) | 88 | return stripper_class(realname, filename, parser, editor, backup, |
| 89 | add2archive) | ||
diff --git a/lib/parser.py b/lib/parser.py index 2b7b52e..6e6ee34 100644 --- a/lib/parser.py +++ b/lib/parser.py | |||
| @@ -5,16 +5,18 @@ | |||
| 5 | import hachoir_core.error | 5 | import hachoir_core.error |
| 6 | import hachoir_parser | 6 | import hachoir_parser |
| 7 | import hachoir_editor | 7 | import hachoir_editor |
| 8 | |||
| 8 | import sys | 9 | import sys |
| 9 | import os | 10 | import os |
| 10 | import subprocess | 11 | import subprocess |
| 11 | import mimetypes | 12 | import mimetypes |
| 13 | |||
| 12 | import mat | 14 | import mat |
| 13 | 15 | ||
| 14 | POSTFIX = ".cleaned" | 16 | POSTFIX = ".cleaned" |
| 15 | 17 | ||
| 16 | class Generic_parser(object): | 18 | class Generic_parser(object): |
| 17 | def __init__(self, realname, filename, parser, editor, backup): | 19 | def __init__(self, realname, filename, parser, editor, backup, add2archive): |
| 18 | self.filename = filename | 20 | self.filename = filename |
| 19 | self.realname = realname | 21 | self.realname = realname |
| 20 | self.shortname = os.path.basename(filename) | 22 | self.shortname = os.path.basename(filename) |
