diff options
| author | jvoisin | 2011-07-21 18:20:14 +0200 |
|---|---|---|
| committer | jvoisin | 2011-07-21 18:20:14 +0200 |
| commit | 4ca735bff5e4df2f6f61ff035633d3f729ad24ff (patch) | |
| tree | 78587500a72cf2883bcaf7141cd2a20f72e871ed /lib | |
| parent | 9ba599ff326c01911d29c7eb422f0fe02342b502 (diff) | |
Creation of a metaclass for archives fileformat
Diffstat (limited to '')
| -rw-r--r-- | lib/archive.py | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/lib/archive.py b/lib/archive.py index 5b43f11..fb6dfa2 100644 --- a/lib/archive.py +++ b/lib/archive.py | |||
| @@ -1,37 +1,47 @@ | |||
| 1 | import tarfile | 1 | import tarfile |
| 2 | import zipfile | 2 | import zipfile |
| 3 | |||
| 3 | import sys | 4 | import sys |
| 4 | import shutil | 5 | import shutil |
| 5 | import os | 6 | import os |
| 7 | import logging | ||
| 6 | 8 | ||
| 7 | import parser | 9 | import parser |
| 8 | import mat | 10 | import mat |
| 9 | 11 | ||
| 10 | class ZipStripper(parser.Generic_parser): | 12 | class GenericArchiveStripper(parser.Generic_parser): |
| 13 | ''' | ||
| 14 | Represent a generic archive | ||
| 15 | ''' | ||
| 16 | def __init__(self, realname, filename, parser, editor, backup): | ||
| 17 | super(GenericArchiveStripper, self).__init__(realname, | ||
| 18 | filename, parser, editor, backup) | ||
| 19 | self.compression = '' | ||
| 20 | self.folder_list = [] | ||
| 21 | |||
| 22 | def remove_folder(self): | ||
| 23 | [shutil.rmtree(folder) for folder in self.folder_list] | ||
| 24 | self.folder_list = [] | ||
| 25 | |||
| 26 | class ZipStripper(GenericArchiveStripper): | ||
| 11 | def is_clean(self): | 27 | def is_clean(self): |
| 12 | return False | 28 | return False |
| 13 | 29 | ||
| 14 | def get_meta(self): | 30 | def get_meta(self): |
| 15 | self.zipin = zipfile.ZipFile(self.filename, 'r') | 31 | zipin = zipfile.ZipFile(self.filename, 'r') |
| 16 | metadata = {} | 32 | metadata = {} |
| 17 | for field in self.zipin.infolist(): | 33 | for field in zipin.infolist(): |
| 18 | zipmeta = {} | 34 | zipmeta = {} |
| 19 | zipmeta['comment'] = field.comment | 35 | zipmeta['comment'] = field.comment |
| 20 | zipmeta['modified'] = str(field.date_time) | 36 | zipmeta['modified'] = field.date_time |
| 21 | zipmeta['system'] = field.create_system | 37 | zipmeta['system'] = field.create_system |
| 22 | zipmeta['zip_version'] = field.create_version | 38 | zipmeta['zip_version'] = field.create_version |
| 23 | metadata[field.filename] = zipmeta | 39 | metadata[field.filename] = zipmeta |
| 24 | self.zipin.close() | 40 | zipin.close() |
| 25 | return metadata | 41 | return metadata |
| 26 | 42 | ||
| 27 | 43 | ||
| 28 | class TarStripper(parser.Generic_parser): | 44 | class TarStripper(GenericArchiveStripper): |
| 29 | def __init__(self, realname, filename, parser, editor, backup): | ||
| 30 | super(TarStripper, self).__init__(realname, | ||
| 31 | filename, parser, editor, backup) | ||
| 32 | self.compression = '' | ||
| 33 | self.folder_list = [] | ||
| 34 | |||
| 35 | def _remove(self, current_file): | 45 | def _remove(self, current_file): |
| 36 | ''' | 46 | ''' |
| 37 | remove the meta added by tar itself to the file | 47 | remove the meta added by tar itself to the file |
| @@ -51,16 +61,17 @@ class TarStripper(parser.Generic_parser): | |||
| 51 | tarin.extract(current_file) | 61 | tarin.extract(current_file) |
| 52 | if current_file.type is '0': #is current_file a regular file ? | 62 | if current_file.type is '0': #is current_file a regular file ? |
| 53 | #no backup file | 63 | #no backup file |
| 54 | class_file = mat.create_class_file(current_file.name, False) | 64 | try: |
| 55 | class_file.remove_all() | 65 | cfile = mat.create_class_file(current_file.name, False) |
| 66 | cfile.remove_all() | ||
| 67 | except: | ||
| 68 | print('%s\' format is not supported'%current_file.name) | ||
| 56 | tarout.add(current_file.name, filter=self._remove) | 69 | tarout.add(current_file.name, filter=self._remove) |
| 57 | mat.secure_remove(current_file.name) | 70 | mat.secure_remove(current_file.name) |
| 58 | else: | 71 | else: |
| 59 | self.folder_list.insert(0, current_file.name) | 72 | self.folder_list.insert(0, current_file.name) |
| 60 | tarin.close() | 73 | tarin.close() |
| 61 | tarout.close() | 74 | tarout.close() |
| 62 | print self.folder_list | ||
| 63 | |||
| 64 | self.remove_folder() | 75 | self.remove_folder() |
| 65 | 76 | ||
| 66 | if self.backup is False: | 77 | if self.backup is False: |
| @@ -120,9 +131,6 @@ class TarStripper(parser.Generic_parser): | |||
| 120 | tarin.close() | 131 | tarin.close() |
| 121 | return metadata | 132 | return metadata |
| 122 | 133 | ||
| 123 | def remove_folder(self): | ||
| 124 | [shutil.rmtree(folder) for folder in self.folder_list] | ||
| 125 | self.folder_list = [] | ||
| 126 | 134 | ||
| 127 | class GzipStripper(TarStripper): | 135 | class GzipStripper(TarStripper): |
| 128 | def __init__(self, realname, filename, parser, editor, backup): | 136 | def __init__(self, realname, filename, parser, editor, backup): |
| @@ -130,6 +138,7 @@ class GzipStripper(TarStripper): | |||
| 130 | filename, parser, editor, backup) | 138 | filename, parser, editor, backup) |
| 131 | self.compression = ':gz' | 139 | self.compression = ':gz' |
| 132 | 140 | ||
| 141 | |||
| 133 | class Bzip2Stripper(TarStripper): | 142 | class Bzip2Stripper(TarStripper): |
| 134 | def __init__(self, realname, filename, parser, editor, backup): | 143 | def __init__(self, realname, filename, parser, editor, backup): |
| 135 | super(Bzip2Stripper, self).__init__(realname, | 144 | super(Bzip2Stripper, self).__init__(realname, |
