diff options
Diffstat (limited to '')
| -rw-r--r-- | lib/archive.py | 32 | ||||
| -rw-r--r-- | lib/mat.py | 1 |
2 files changed, 25 insertions, 8 deletions
diff --git a/lib/archive.py b/lib/archive.py index 8fa826e..caa0a32 100644 --- a/lib/archive.py +++ b/lib/archive.py | |||
| @@ -1,18 +1,34 @@ | |||
| 1 | import tarfile | 1 | import tarfile |
| 2 | import zipfile | ||
| 2 | import sys | 3 | import sys |
| 3 | import parser | ||
| 4 | import mat | ||
| 5 | import shutil | 4 | import shutil |
| 6 | import os | 5 | import os |
| 7 | import mimetypes | 6 | |
| 7 | import parser | ||
| 8 | import mat | ||
| 9 | |||
| 10 | class ZipStripper(parser.Generic_parser): | ||
| 11 | def is_clean(self): | ||
| 12 | return False | ||
| 13 | |||
| 14 | def get_meta(self): | ||
| 15 | self.zipin = zipfile.ZipFile(self.filename, 'r') | ||
| 16 | metadata = {} | ||
| 17 | for field in self.zipin.infolist(): | ||
| 18 | zipmeta = {} | ||
| 19 | zipmeta['comment'] = field.comment | ||
| 20 | zipmeta['modified'] = str(field.date_time) | ||
| 21 | zipmeta['system'] = field.create_system | ||
| 22 | zipmeta['zip_version'] = field.create_version | ||
| 23 | metadata[field.filename] = zipmeta | ||
| 24 | self.zipin.close() | ||
| 25 | return metadata | ||
| 8 | 26 | ||
| 9 | class TarStripper(parser.Generic_parser): | 27 | class TarStripper(parser.Generic_parser): |
| 10 | def __init__(self, realname, filename, parser, editor, backup): | 28 | def __init__(self, realname, filename, parser, editor, backup): |
| 11 | super(TarStripper, self).__init__(realname, | 29 | super(TarStripper, self).__init__(realname, |
| 12 | filename, parser, editor, backup) | 30 | filename, parser, editor, backup) |
| 13 | self.compression = '' | 31 | self.compression = '' |
| 14 | self.shortname = os.path.basename(filename) | ||
| 15 | self.mime = mimetypes.guess_type(filename)[0] | ||
| 16 | self.tarin = tarfile.open(self.filename, 'r' + self.compression) | 32 | self.tarin = tarfile.open(self.filename, 'r' + self.compression) |
| 17 | self.folder_list = [] | 33 | self.folder_list = [] |
| 18 | 34 | ||
| @@ -75,9 +91,9 @@ class TarStripper(parser.Generic_parser): | |||
| 75 | if current_file.type is '0': #is current_file a regular file ? | 91 | if current_file.type is '0': #is current_file a regular file ? |
| 76 | #no backup file | 92 | #no backup file |
| 77 | class_file = mat.create_class_file(current_file.name, False) | 93 | class_file = mat.create_class_file(current_file.name, False) |
| 78 | if not class_file.is_clean(): | 94 | if not class_file.is_clean():#if the extracted file is not clean |
| 79 | mat.secure_remove(current_file.name) | 95 | mat.secure_remove(current_file.name) #remove it |
| 80 | self.remove_folder() | 96 | self.remove_folder() #remove all the remaining folders |
| 81 | return False | 97 | return False |
| 82 | if not self.is_file_clean(current_file): | 98 | if not self.is_file_clean(current_file): |
| 83 | return False | 99 | return False |
| @@ -32,6 +32,7 @@ strippers = { | |||
| 32 | hachoir_parser.archive.TarFile: archive.TarStripper, | 32 | hachoir_parser.archive.TarFile: archive.TarStripper, |
| 33 | hachoir_parser.archive.gzip_parser.GzipParser: archive.GzipStripper, | 33 | hachoir_parser.archive.gzip_parser.GzipParser: archive.GzipStripper, |
| 34 | hachoir_parser.archive.bzip2_parser.Bzip2Parser: archive.Bzip2Stripper, | 34 | hachoir_parser.archive.bzip2_parser.Bzip2Parser: archive.Bzip2Stripper, |
| 35 | hachoir_parser.archive.zip.ZipFile: archive.ZipStripper, | ||
| 35 | } | 36 | } |
| 36 | 37 | ||
| 37 | def secure_remove(filename): | 38 | def secure_remove(filename): |
