Refactored code
This commit is contained in:
parent
7255241e6c
commit
0638d21473
|
@ -2,9 +2,28 @@
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from media.monitor.pure import truncate_to_length, toposort
|
from media.monitor.pure import truncate_to_length, toposort
|
||||||
from os.path import normpath
|
from os.path import normpath
|
||||||
|
from media.monitor.exceptions import BadSongFile
|
||||||
from media.monitor.log import Loggable
|
from media.monitor.log import Loggable
|
||||||
|
import media.monitor.pure as mmp
|
||||||
|
from collections import namedtuple
|
||||||
import mutagen
|
import mutagen
|
||||||
|
|
||||||
|
class FakeMutagen(dict):
|
||||||
|
"""
|
||||||
|
Need this fake mutagen object so that airtime_special functions
|
||||||
|
return a proper default value instead of throwing an exceptions for
|
||||||
|
files that mutagen doesn't recognize
|
||||||
|
"""
|
||||||
|
FakeInfo = namedtuple('FakeInfo','length bitrate')
|
||||||
|
def __init__(self,path):
|
||||||
|
self.path = path
|
||||||
|
self.mime = ['audio/wav']
|
||||||
|
self.info = FakeMutagen.FakeInfo(0.0, '')
|
||||||
|
dict.__init__(self)
|
||||||
|
def set_length(self,l):
|
||||||
|
old_bitrate = self.info.bitrate
|
||||||
|
self.info = FakeMutagen.FakeInfo(l, old_bitrate)
|
||||||
|
|
||||||
|
|
||||||
class MetadataAbsent(Exception):
|
class MetadataAbsent(Exception):
|
||||||
def __init__(self, name): self.name = name
|
def __init__(self, name): self.name = name
|
||||||
|
@ -129,7 +148,14 @@ def normalize_mutagen(path):
|
||||||
Consumes a path and reads the metadata using mutagen. normalizes some of
|
Consumes a path and reads the metadata using mutagen. normalizes some of
|
||||||
the metadata that isn't read through the mutagen hash
|
the metadata that isn't read through the mutagen hash
|
||||||
"""
|
"""
|
||||||
m = mutagen.File(path, easy=True)
|
if not mmp.file_playable(path): raise BadSongFile(path)
|
||||||
|
try : m = mutagen.File(path, easy=True)
|
||||||
|
except Exception : raise BadSongFile(path)
|
||||||
|
if m is None: m = FakeMutagen(path)
|
||||||
|
try:
|
||||||
|
if mmp.extension(path) == 'wav':
|
||||||
|
m.set_length(mmp.read_wave_duration(path))
|
||||||
|
except Exception: raise BadSongFile(path)
|
||||||
md = {}
|
md = {}
|
||||||
for k,v in m.iteritems():
|
for k,v in m.iteritems():
|
||||||
if type(v) is list:
|
if type(v) is list:
|
||||||
|
|
|
@ -48,6 +48,8 @@ airtime2mutagen = {
|
||||||
"MDATA_KEY_COPYRIGHT" : "copyright",
|
"MDATA_KEY_COPYRIGHT" : "copyright",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# TODO :Remove FakeMutagen class. Moved to media.metadata.process
|
||||||
class FakeMutagen(dict):
|
class FakeMutagen(dict):
|
||||||
"""
|
"""
|
||||||
Need this fake mutagen object so that airtime_special functions
|
Need this fake mutagen object so that airtime_special functions
|
||||||
|
@ -172,6 +174,9 @@ class Metadata(Loggable):
|
||||||
for e in exceptions: raise e
|
for e in exceptions: raise e
|
||||||
|
|
||||||
def __init__(self, fpath):
|
def __init__(self, fpath):
|
||||||
|
# Forcing the unicode through
|
||||||
|
try : fpath = fpath.decode("utf-8")
|
||||||
|
except : pass
|
||||||
self.__metadata = global_reader.read_mutagen(fpath)
|
self.__metadata = global_reader.read_mutagen(fpath)
|
||||||
|
|
||||||
def __init__2(self, fpath):
|
def __init__2(self, fpath):
|
||||||
|
|
Loading…
Reference in New Issue