From 2ab50a6e764cf71bfdc831dfaa80887e8f8cb3ef Mon Sep 17 00:00:00 2001 From: jvoisin Date: Wed, 6 Mar 2013 13:11:14 +0100 Subject: Heavy refactoring of mutagen-powered formats --- MAT/audio.py | 74 ++++++++++++--------------------------------------- MAT/mutagenpowered.py | 35 ++++++++++++++++++++++++ MAT/strippers.py | 1 - 3 files changed, 52 insertions(+), 58 deletions(-) create mode 100644 MAT/mutagenpowered.py (limited to 'MAT') diff --git a/MAT/audio.py b/MAT/audio.py index ed849ee..4df33dd 100644 --- a/MAT/audio.py +++ b/MAT/audio.py @@ -1,15 +1,15 @@ ''' Care about audio fileformat ''' + try: from mutagen.flac import FLAC from mutagen.oggvorbis import OggVorbis except ImportError: pass - import parser -import shutil +import mutagenpowered class MpegAudioStripper(parser.GenericParser): @@ -17,84 +17,44 @@ class MpegAudioStripper(parser.GenericParser): Represent mpeg audio file (mp3, ...) ''' def _should_remove(self, field): - if field.name in ("id3v1", "id3v2"): - return True - else: - return False + return field.name in ("id3v1", "id3v2") -class OggStripper(parser.GenericParser): +class OggStripper(mutagenpowered.MutagenStripper): ''' Represent an ogg vorbis file ''' - def remove_all(self): - if self.backup is True: - shutil.copy2(self.filename, self.output) - self.filename = self.output - - mfile = OggVorbis(self.filename) - mfile.delete() - mfile.save() - return True - - def is_clean(self): - ''' - Check if the "metadata" block is present in the file - ''' - mfile = OggVorbis(self.filename) - if mfile.tags == []: - return True - else: - return False - - def get_meta(self): - ''' - Return the content of the metadata block if present - ''' - metadata = {} - mfile = OggVorbis(self.filename) - for key, value in mfile.tags: - metadata[key] = value - return metadata + def _create_mfile(self): + self.mfile = OggVorbis(self.filename) -class FlacStripper(parser.GenericParser): +class FlacStripper(mutagenpowered.MutagenStripper): ''' Represent a Flac audio file ''' + def _create_mfile(self): + self.mfile = FLAC(self.filename) + def remove_all(self): ''' Remove the "metadata" block from the file ''' - if self.backup is True: - shutil.copy2(self.filename, self.output) - self.filename = self.output - - mfile = FLAC(self.filename) - mfile.delete() - mfile.clear_pictures() - mfile.save() + super(FlacStripper, self).remove_all() + self.mfile.clear_pictures() + self.mfile.save() return True def is_clean(self): ''' Check if the "metadata" block is present in the file ''' - mfile = FLAC(self.filename) - if mfile.tags is None and mfile.pictures == []: - return True - else: - return False + return super(FlacStripper, self).is_clean() and not self.mfile.pictures def get_meta(self): ''' Return the content of the metadata block if present ''' - metadata = {} - mfile = FLAC(self.filename) - if mfile.tags is not None: - if mfile.pictures != []: - metadata['picture :'] = 'yes' - for key, value in mfile.tags: - metadata[key] = value + metadata = super(FlacStripper, self).get_meta() + if self.mfile.pictures: + metadata['picture:'] = 'yes' return metadata diff --git a/MAT/mutagenpowered.py b/MAT/mutagenpowered.py new file mode 100644 index 0000000..d44bbdb --- /dev/null +++ b/MAT/mutagenpowered.py @@ -0,0 +1,35 @@ +import parser +import shutil + + +class MutagenStripper(parser.GenericParser): + def __init__(self, filename, parser, mime, backup, **kwargs): + super(MutagenStripper, self).__init__(filename, parser, mime, backup, **kwargs) + self._create_mfile() + + def _create_mfile(self): + raise NotImplemented + + def is_clean(self): + return not self.mfile.tags + + def remove_all(self): + if self.backup: + shutil.copy2(self.filename, self.output) + self.mfile.filename = self.output + else: + self.mfile.filename = self.filename + + self.mfile.delete() + self.mfile.save() + return True + + def get_meta(self): + ''' + Return the content of the metadata block is present + ''' + metadata = {} + if self.mfile.tags: + for key, value in self.mfile.tags: + metadata[key] = value + return metadata diff --git a/MAT/strippers.py b/MAT/strippers.py index 4b673fe..2bd17e1 100644 --- a/MAT/strippers.py +++ b/MAT/strippers.py @@ -64,4 +64,3 @@ except OSError: # if exiftool is not installed, use hachoir print('Unable to find exiftool: limited images support') STRIPPERS['image/jpeg'] = images.JpegStripper STRIPPERS['image/png'] = images.PngStripper - -- cgit v1.3 From b7848465cb833c36843921e32fa4903fe2bc73f4 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Wed, 6 Mar 2013 13:23:52 +0100 Subject: Some minor syntastic sugar --- MAT/archive.py | 11 +++++------ MAT/misc.py | 4 ++-- MAT/parser.py | 2 +- MAT/strippers.py | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) (limited to 'MAT') diff --git a/MAT/archive.py b/MAT/archive.py index 1dcddef..8127665 100644 --- a/MAT/archive.py +++ b/MAT/archive.py @@ -47,16 +47,15 @@ class ZipStripper(GenericArchiveStripper): Check if a ZipInfo object is clean of metadatas added by zip itself, independently of the corresponding file metadatas ''' - if fileinfo.comment != '': + if fileinfo.comment: return False - elif fileinfo.date_time != 0: + elif fileinfo.date_time: return False - elif fileinfo.create_system != 0: + elif fileinfo.create_system: return False - elif fileinfo.create_version != 0: + elif fileinfo.create_version: return False - else: - return True + return True def is_clean(self): ''' diff --git a/MAT/misc.py b/MAT/misc.py index 28ee892..582f34e 100644 --- a/MAT/misc.py +++ b/MAT/misc.py @@ -24,7 +24,7 @@ class TorrentStripper(parser.GenericParser): decoded = bencode.bdecode(f.read()) for key in self.fields: try: - if decoded[key] != '': + if decoded[key]: return False except KeyError: pass @@ -39,7 +39,7 @@ class TorrentStripper(parser.GenericParser): decoded = bencode.bdecode(f.read()) for key in self.fields: try: - if decoded[key] != '': + if decoded[key]: metadata[key] = decoded[key] except KeyError: pass diff --git a/MAT/parser.py b/MAT/parser.py index e5acbf8..d6b7faf 100644 --- a/MAT/parser.py +++ b/MAT/parser.py @@ -101,7 +101,7 @@ class GenericParser(object): ''' for field in fieldset: remove = self._should_remove(field) - if remove is True: + if remove: try: metadata[field.name] = field.value except: diff --git a/MAT/strippers.py b/MAT/strippers.py index 2bd17e1..bde58ca 100644 --- a/MAT/strippers.py +++ b/MAT/strippers.py @@ -60,7 +60,7 @@ try: import exiftool STRIPPERS['image/jpeg'] = exiftool.JpegStripper STRIPPERS['image/png'] = exiftool.PngStripper -except OSError: # if exiftool is not installed, use hachoir +except OSError: # if exiftool is not installed, use hachoir instead print('Unable to find exiftool: limited images support') STRIPPERS['image/jpeg'] = images.JpegStripper STRIPPERS['image/png'] = images.PngStripper -- cgit v1.3