summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorjvoisin2011-07-21 18:20:14 +0200
committerjvoisin2011-07-21 18:20:14 +0200
commit4ca735bff5e4df2f6f61ff035633d3f729ad24ff (patch)
tree78587500a72cf2883bcaf7141cd2a20f72e871ed /lib
parent9ba599ff326c01911d29c7eb422f0fe02342b502 (diff)
Creation of a metaclass for archives fileformat
Diffstat (limited to '')
-rw-r--r--lib/archive.py47
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 @@
1import tarfile 1import tarfile
2import zipfile 2import zipfile
3
3import sys 4import sys
4import shutil 5import shutil
5import os 6import os
7import logging
6 8
7import parser 9import parser
8import mat 10import mat
9 11
10class ZipStripper(parser.Generic_parser): 12class 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
26class 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
28class TarStripper(parser.Generic_parser): 44class 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
127class GzipStripper(TarStripper): 135class 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
133class Bzip2Stripper(TarStripper): 142class 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,