diff --git a/python_apps/airtime_analyzer/airtime_analyzer/analyzer.py b/python_apps/airtime_analyzer/airtime_analyzer/analyzer.py index d897b479b..7fb00d8db 100644 --- a/python_apps/airtime_analyzer/airtime_analyzer/analyzer.py +++ b/python_apps/airtime_analyzer/airtime_analyzer/analyzer.py @@ -2,7 +2,7 @@ class Analyzer: @staticmethod - def analyze(filename, results): + def analyze(filename, metadata): raise NotImplementedError class AnalyzerError(Exception): diff --git a/python_apps/airtime_analyzer/airtime_analyzer/metadata_analyzer.py b/python_apps/airtime_analyzer/airtime_analyzer/metadata_analyzer.py index a75c4815d..12a792a31 100644 --- a/python_apps/airtime_analyzer/airtime_analyzer/metadata_analyzer.py +++ b/python_apps/airtime_analyzer/airtime_analyzer/metadata_analyzer.py @@ -23,6 +23,7 @@ class MetadataAnalyzer(Analyzer): #in the file header. Mutagen breaks that out into a separate "info" object: info = audio_file.info metadata["sample_rate"] = info.sample_rate + metadata["length_seconds"] = info.length #Converting the length in seconds (float) to a formatted time string track_length = datetime.timedelta(seconds=info.length) metadata["length"] = str(track_length) #time.strftime("%H:%M:%S.%f", track_length) diff --git a/python_apps/airtime_analyzer/tests/analyzer_pipeline_tests.py b/python_apps/airtime_analyzer/tests/analyzer_pipeline_tests.py index 4ac1e49ea..cc5dc96b5 100644 --- a/python_apps/airtime_analyzer/tests/analyzer_pipeline_tests.py +++ b/python_apps/airtime_analyzer/tests/analyzer_pipeline_tests.py @@ -1,24 +1,34 @@ from nose.tools import * +import os +import shutil import multiprocessing +import datetime from airtime_analyzer.analyzer_pipeline import AnalyzerPipeline DEFAULT_AUDIO_FILE = u'tests/test_data/44100Hz-16bit-mono.mp3' +DEFAULT_IMPORT_DEST = u'Test Artist/44100Hz-16bit-mono.mp3' def setup(): pass def teardown(): - pass + #Move the file back + shutil.move(DEFAULT_IMPORT_DEST, DEFAULT_AUDIO_FILE) + assert os.path.exists(DEFAULT_AUDIO_FILE) def test_basic(): + filename = os.path.basename(DEFAULT_AUDIO_FILE) q = multiprocessing.Queue() - AnalyzerPipeline.run_analysis(q, DEFAULT_AUDIO_FILE, u'.') + #This actually imports the file into the "./Test Artist" directory. + AnalyzerPipeline.run_analysis(q, DEFAULT_AUDIO_FILE, u'.', filename) results = q.get() assert results['track_title'] == u'Test Title' assert results['artist_name'] == u'Test Artist' assert results['album_title'] == u'Test Album' assert results['year'] == u'1999' assert results['genre'] == u'Test Genre' - assert results['mime_type'] == 'audio/mpeg' # Not unicode because MIMEs aren't. - assert results['length_seconds'] == 3.90925 + assert results['mime'] == 'audio/mpeg' # Not unicode because MIMEs aren't. + assert results['length_seconds'] == 3.90925 + assert results["length"] == str(datetime.timedelta(seconds=results["length_seconds"])) + assert os.path.exists(DEFAULT_IMPORT_DEST) diff --git a/python_apps/airtime_analyzer/tests/metadata_analyzer_tests.py b/python_apps/airtime_analyzer/tests/metadata_analyzer_tests.py index 1107c078a..01a2c3d77 100644 --- a/python_apps/airtime_analyzer/tests/metadata_analyzer_tests.py +++ b/python_apps/airtime_analyzer/tests/metadata_analyzer_tests.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import datetime from nose.tools import * from airtime_analyzer.metadata_analyzer import MetadataAnalyzer @@ -15,61 +16,62 @@ def check_default_metadata(metadata): assert metadata['year'] == u'1999' assert metadata['genre'] == u'Test Genre' assert metadata['track_number'] == u'1' + assert metadata["length"] == str(datetime.timedelta(seconds=metadata["length_seconds"])) def test_mp3_mono(): - metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-mono.mp3') + metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-mono.mp3', dict()) check_default_metadata(metadata) assert metadata['channels'] == 1 assert metadata['bit_rate'] == 64000 assert metadata['length_seconds'] == 3.90925 - assert metadata['mime_type'] == 'audio/mpeg' # Not unicode because MIMEs aren't. + assert metadata['mime'] == 'audio/mpeg' # Not unicode because MIMEs aren't. assert metadata['track_total'] == u'10' # MP3s can have a track_total #Mutagen doesn't extract comments from mp3s it seems def test_mp3_jointstereo(): - metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-jointstereo.mp3') + metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-jointstereo.mp3', dict()) check_default_metadata(metadata) assert metadata['channels'] == 2 assert metadata['bit_rate'] == 128000 assert metadata['length_seconds'] == 3.90075 - assert metadata['mime_type'] == 'audio/mpeg' + assert metadata['mime'] == 'audio/mpeg' assert metadata['track_total'] == u'10' # MP3s can have a track_total def test_mp3_simplestereo(): - metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-simplestereo.mp3') + metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-simplestereo.mp3', dict()) check_default_metadata(metadata) assert metadata['channels'] == 2 assert metadata['bit_rate'] == 128000 assert metadata['length_seconds'] == 3.90075 - assert metadata['mime_type'] == 'audio/mpeg' + assert metadata['mime'] == 'audio/mpeg' assert metadata['track_total'] == u'10' # MP3s can have a track_total def test_mp3_dualmono(): - metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-dualmono.mp3') + metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-dualmono.mp3', dict()) check_default_metadata(metadata) assert metadata['channels'] == 2 assert metadata['bit_rate'] == 128000 assert metadata['length_seconds'] == 3.90075 - assert metadata['mime_type'] == 'audio/mpeg' + assert metadata['mime'] == 'audio/mpeg' assert metadata['track_total'] == u'10' # MP3s can have a track_total def test_ogg_mono(): - metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-mono.ogg') + metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-mono.ogg', dict()) check_default_metadata(metadata) assert metadata['channels'] == 1 assert metadata['bit_rate'] == 80000 assert metadata['length_seconds'] == 3.8394104308390022 - assert metadata['mime_type'] == 'application/ogg' + assert metadata['mime'] == 'application/ogg' assert metadata['comment'] == u'Test Comment' def test_ogg_stereo(): - metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-stereo.ogg') + metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-stereo.ogg', dict()) check_default_metadata(metadata) assert metadata['channels'] == 2 assert metadata['bit_rate'] == 112000 assert metadata['length_seconds'] == 3.8394104308390022 - assert metadata['mime_type'] == 'application/ogg' + assert metadata['mime'] == 'application/ogg' assert metadata['comment'] == u'Test Comment' ''' faac and avconv can't seem to create a proper mono AAC file... ugh @@ -81,21 +83,21 @@ def test_aac_mono(): assert metadata['channels'] == 1 assert metadata['bit_rate'] == 80000 assert metadata['length_seconds'] == 3.8394104308390022 - assert metadata['mime_type'] == 'video/mp4' + assert metadata['mime'] == 'video/mp4' assert metadata['comment'] == u'Test Comment' ''' def test_aac_stereo(): - metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-stereo.m4a') + metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-stereo.m4a', dict()) check_default_metadata(metadata) assert metadata['channels'] == 2 assert metadata['bit_rate'] == 102619 assert metadata['length_seconds'] == 3.8626303854875284 - assert metadata['mime_type'] == 'video/mp4' + assert metadata['mime'] == 'video/mp4' assert metadata['comment'] == u'Test Comment' def test_mp3_utf8(): - metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-stereo-utf8.mp3') + metadata = MetadataAnalyzer.analyze(u'tests/test_data/44100Hz-16bit-stereo-utf8.mp3', dict()) # Using a bunch of different UTF-8 codepages here. Test data is from: # http://winrus.com/utf8-jap.htm assert metadata['track_title'] == u'アイウエオカキクケコサシスセソタチツテ' @@ -107,6 +109,6 @@ def test_mp3_utf8(): assert metadata['channels'] == 2 assert metadata['bit_rate'] == 128000 assert metadata['length_seconds'] == 3.90075 - assert metadata['mime_type'] == 'audio/mpeg' + assert metadata['mime'] == 'audio/mpeg' assert metadata['track_total'] == u'10' # MP3s can have a track_total