diff options
| -rw-r--r-- | lib/office.py | 43 |
1 files changed, 16 insertions, 27 deletions
diff --git a/lib/office.py b/lib/office.py index 5d62732..f87f357 100644 --- a/lib/office.py +++ b/lib/office.py | |||
| @@ -20,15 +20,6 @@ class OpenDocumentStripper(archive.GenericArchiveStripper): | |||
| 20 | The one that interest us is meta.xml | 20 | The one that interest us is meta.xml |
| 21 | ''' | 21 | ''' |
| 22 | 22 | ||
| 23 | def remove_folder(self, folder_list): | ||
| 24 | for folder in folder_list: | ||
| 25 | dirname = folder.split('/')[0] | ||
| 26 | try: | ||
| 27 | shutil.rmtree(dirname) | ||
| 28 | except:#Some folder or open document format are buggies | ||
| 29 | pass | ||
| 30 | self.folder_list = [] | ||
| 31 | |||
| 32 | def _remove_all(self, method): | 23 | def _remove_all(self, method): |
| 33 | ''' | 24 | ''' |
| 34 | FIXME ? | 25 | FIXME ? |
| @@ -38,25 +29,24 @@ class OpenDocumentStripper(archive.GenericArchiveStripper): | |||
| 38 | zipin = zipfile.ZipFile(self.filename, 'r') | 29 | zipin = zipfile.ZipFile(self.filename, 'r') |
| 39 | zipout = zipfile.ZipFile(self.filename + parser.POSTFIX, 'w', | 30 | zipout = zipfile.ZipFile(self.filename + parser.POSTFIX, 'w', |
| 40 | allowZip64=True) | 31 | allowZip64=True) |
| 41 | folder_list = [] | ||
| 42 | for item in zipin.namelist(): | 32 | for item in zipin.namelist(): |
| 43 | if os.path.basename(item) is not item:#add folders to folder_list | 33 | name = os.path.join(self.tempdir, item) |
| 44 | folder_list.insert(0, os.path.dirname(item)) | 34 | if item.endswith('.xml') or item == 'mimetype': |
| 45 | if item.endswith('.xml') or item.startswith('manifest'): | 35 | #keep .xml files, and the "manifest" file |
| 46 | if item != 'meta.xml':#contains the metadata | 36 | if item != 'meta.xml':#contains the metadata |
| 47 | zipin.extract(item) | 37 | zipin.extract(item, self.tempdir) |
| 48 | zipout.write(item) | 38 | zipout.write(name, item) |
| 49 | mat.secure_remove(item) | 39 | mat.secure_remove(name) |
| 50 | elif item == 'mimetype': | 40 | elif item.endswith('manifest.xml'): |
| 51 | zipin.extract(item) | 41 | zipin.extract(item, self.tempdir) |
| 52 | #remove line meta.xml | 42 | #remove line meta.xml |
| 53 | zipout.write(item) | 43 | zipout.write(name, item) |
| 54 | mat.secure_remove(item) | 44 | mat.secure_remove(name) |
| 55 | else: | 45 | else: |
| 56 | zipin.extract(item) | 46 | zipin.extract(item, self.tempdir) |
| 57 | if os.path.isfile(item): | 47 | if os.path.isfile(name): |
| 58 | try: | 48 | try: |
| 59 | cfile = mat.create_class_file(item, False, | 49 | cfile = mat.create_class_file(name, False, |
| 60 | self.add2archive) | 50 | self.add2archive) |
| 61 | if method == 'normal': | 51 | if method == 'normal': |
| 62 | cfile.remove_all() | 52 | cfile.remove_all() |
| @@ -64,18 +54,17 @@ class OpenDocumentStripper(archive.GenericArchiveStripper): | |||
| 64 | cfile.remove_all_ugly() | 54 | cfile.remove_all_ugly() |
| 65 | logging.debug('Processing %s from %s' % (item, | 55 | logging.debug('Processing %s from %s' % (item, |
| 66 | self.filename)) | 56 | self.filename)) |
| 67 | zipout.write(item) | 57 | zipout.write(name, item) |
| 68 | except: | 58 | except: |
| 69 | logging.info('%s\' fileformat is not supported' % | 59 | logging.info('%s\' fileformat is not supported' % |
| 70 | item) | 60 | item) |
| 71 | if self.add2archive: | 61 | if self.add2archive: |
| 72 | zipout.write(item) | 62 | zipout.write(item, name) |
| 73 | mat.secure_remove(item) | 63 | mat.secure_remove(name) |
| 74 | zipout.comment = '' | 64 | zipout.comment = '' |
| 75 | logging.info('%s treated' % self.filename) | 65 | logging.info('%s treated' % self.filename) |
| 76 | zipin.close() | 66 | zipin.close() |
| 77 | zipout.close() | 67 | zipout.close() |
| 78 | self.remove_folder(folder_list) | ||
| 79 | 68 | ||
| 80 | if self.backup is False: | 69 | if self.backup is False: |
| 81 | mat.secure_remove(self.filename) #remove the old file | 70 | mat.secure_remove(self.filename) #remove the old file |
