cc-4105: Forcing unicode on paths. Added tests for metadata (unicode related)

This commit is contained in:
Rudi Grinberg 2012-07-20 10:21:10 -04:00
parent 5d875c5020
commit 349c6f61f6
3 changed files with 13 additions and 5 deletions

View File

@ -92,6 +92,9 @@ def truncate_to_length(item, length):
class Metadata(Loggable):
def __init__(self, fpath):
# Forcing the unicode through
try: fpath = fpath.decode("utf-8")
except: pass
try: full_mutagen = mutagen.File(fpath, easy=True)
except Exception: raise BadSongFile(fpath)
self.path = fpath

View File

@ -83,7 +83,7 @@ def no_extension_basename(path):
>>> no_extension_basename('blah.ml')
'blah'
"""
base = os.path.basename(path)
base = unicode(os.path.basename(path))
if extension(base) == "": return base
else: return base.split(".")[-2]
@ -154,7 +154,7 @@ def normalized_metadata(md, original_path):
hour,minute,second,name = md['MDATA_KEY_TITLE'].split("-",4)
# We assume that MDATA_KEY_YEAR is always given for airtime recorded
# shows
new_md['MDATA_KEY_TITLE'] = '%s-%s-%s:%s:%s' % \
new_md['MDATA_KEY_TITLE'] = u'%s-%s-%s:%s:%s' % \
(name, new_md['MDATA_KEY_YEAR'], hour, minute, second)
# IMPORTANT: in the original code. MDATA_KEY_FILEPATH would also
# be set to the original path of the file for airtime recorded shows

View File

@ -6,7 +6,7 @@ from media.monitor.metadata import Metadata
class TestMetadata(unittest.TestCase):
def setUp(self):
self.music_folder = '/home/rudi/music'
self.music_folder = u'/home/rudi/music'
def test_got_music_folder(self):
t = os.path.exists(self.music_folder)
@ -20,13 +20,18 @@ class TestMetadata(unittest.TestCase):
i = 0
for full_path in full_paths:
if os.path.isfile(full_path):
md = Metadata(full_path).extract()
md_full = Metadata(full_path)
md = md_full.extract()
if i < 3:
i += 1
print("Sample metadata: '%s'" % md)
self.assertTrue( len( md.keys() ) > 0 )
self.assertTrue( 'MDATA_KEY_MD5' in md )
utf8 = md_full.utf8()
for k,v in md.iteritems():
if hasattr(utf8[k], 'decode'):
self.assertEqual( utf8[k].decode('utf-8'), md[k] )
else:
print("Skipping '%s'" % full_path)
print("Skipping '%s' because it's a directory" % full_path)
if __name__ == '__main__': unittest.main()