def test_add_tags(self): self.failUnlessRaises(NotImplementedError, FileType().add_tags)
def test_add_tags(self): with warnings.catch_warnings(): warnings.simplefilter("ignore") self.failUnlessRaises(NotImplementedError, FileType().add_tags)
def extract_metadata(track: Track, metadata: mutagen.FileType): try: if isinstance(metadata, FLAC): track.audio_format = 'audio/flac' shared_vorbis_extract(track, metadata) if len(metadata.pictures) > 0: apply_thumbnail(track, BytesIO(metadata.pictures[0].data)) elif isinstance(metadata, MP3): # image only accessible with full ID3 apic_tag_array = metadata.tags.getall('APIC') if apic_tag_array is not None and len(apic_tag_array) > 0: apply_thumbnail(track, BytesIO(apic_tag_array[0].data)) # use EasyID3 for everything else metadata = EasyMP3(track.audio_src.path) track.audio_format = 'audio/mpeg' shared_vorbis_extract(track, metadata) elif isinstance(metadata, MP4): if metadata.get('\xa9nam') is not None: track.name = metadata.get('\xa9nam')[0] track.length = datetime.timedelta(seconds=metadata.info.length) track.audio_format = 'audio/mp4' if metadata.get('\xa9ART') is not None: artist, created = Artist.objects.get_or_create( collection=track.collection, name=metadata.get('\xa9ART')[0]) track.artists.add(artist) if metadata.get('aART') is not None: track.album_artist = metadata.get('aART')[0] if metadata.get('\xa9alb') is not None: track.album = Album.objects.get_or_create( collection=track.collection, name=metadata.get('\xa9alb')[0]) if metadata.get('soal') is not None: track.album_track_number = metadata['soal'][0] if metadata.get('\xa9gen') is not None: genre, created = Genre.objects.get_or_create( collection=track.collection, name=metadata.get('\xa9gen')[0]) track.genres.add(genre) if metadata.get('\xa9lyr') is not None: track.lyrics = metadata.get('\xa9lyr')[0] if metadata.get('\xa9day') is not None: track.year = metadata.get('\xa9day')[0] if metadata.get('covr') is not None and len( metadata.get('covr')) > 0: apply_thumbnail(track, Image.open(BytesIO(metadata.get('covr')[0]))) elif isinstance(metadata, OggVorbis): track.audio_format = 'audio/ogg' shared_vorbis_extract(track, metadata) for b64_data in metadata.get("metadata_block_picture", []): try: data = base64.b64decode(b64_data) except (TypeError, ValueError): continue try: picture = Picture(data) apply_thumbnail(track, BytesIO(picture.data)) except FLACError: continue break elif isinstance(metadata, OggOpus): track.audio_format = 'audio/opus' shared_vorbis_extract(track, metadata) for b64_data in metadata.get("metadata_block_picture", []): try: data = base64.b64decode(b64_data) except (TypeError, ValueError): continue try: picture = Picture(data) apply_thumbnail(track, BytesIO(picture.data)) except FLACError: continue break # if name is empty, put filename instead if track.name == '': track.name = track.file_name except mutagen.MutagenError: print("Fail :(") except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] print(exc_type, fname, exc_tb.tb_lineno) print(e)
def shared_vorbis_extract(track: Track, metadata: mutagen.FileType): # print(datetime.timedelta(seconds=metadata.info.length)) print(metadata) # TODO try: track.length = datetime.timedelta(seconds=metadata.info.length) if metadata.get('title') is not None: track.name = metadata.get('title')[0] if metadata.get('artist') is not None: artist, created = Artist.objects.get_or_create( collection=track.collection, name=metadata.get('artist')[0]) track.artists.add(artist) if metadata.get('albumartist') is not None: track.album_artist = metadata.get('albumartist')[0] if metadata.get('album') is not None: track.album, created = Album.objects.get_or_create( collection=track.collection, name=metadata.get('album')[0]) if metadata.get('tracknumber') is not None: track.album_track_number = metadata.get('tracknumber')[0] if metadata.get('genre') is not None: genre, created = Genre.objects.get_or_create( collection=track.collection, name=metadata.get('genre')[0]) track.genres.add(genre) if metadata.get('lyrics') is not None: track.lyrics = metadata.get('lyrics')[0] if metadata.get('date') is not None: track.year = metadata.get('date')[0] except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] print(exc_type, fname, exc_tb.tb_lineno) print(e)
def get_numeric_or_none(self, audio_file: FileType, key: str) -> int: return int(audio_file.get(key)[0]) if audio_file.get(key) else None
def get_or_none(self, audio_file: FileType, key: str) -> str: return audio_file.get(key)[0] if audio_file.get(key) else None