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 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