From 10c4a71866bbb0e9c0992f93b79515077a3dcb0e Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Tue, 9 Oct 2012 14:46:01 -0400 Subject: [PATCH] Added default translator for mdata elements that don't specify it --- .../media/metadata/definitions.py | 2 +- .../media-monitor2/media/metadata/process.py | 19 ++++++++++++++++++- .../media-monitor2/media/monitor/metadata.py | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/python_apps/media-monitor2/media/metadata/definitions.py b/python_apps/media-monitor2/media/metadata/definitions.py index cfeb0d2fb..68ada6034 100644 --- a/python_apps/media-monitor2/media/metadata/definitions.py +++ b/python_apps/media-monitor2/media/metadata/definitions.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -import media.monitor.process as md +import media.metadata.process as md from os.path import normpath from media.monitor.pure import format_length, file_md5 diff --git a/python_apps/media-monitor2/media/metadata/process.py b/python_apps/media-monitor2/media/metadata/process.py index a4c361468..6cebc0269 100644 --- a/python_apps/media-monitor2/media/metadata/process.py +++ b/python_apps/media-monitor2/media/metadata/process.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from contextlib import contextmanager from media.monitor.pure import truncate_to_length, toposort +from media.monitor.log import Loggable import mutagen @@ -8,7 +9,12 @@ class MetadataAbsent(Exception): def __init__(self, name): self.name = name def __str__(self): return "Could not obtain element '%s'" % self.name -class MetadataElement(object): +class MetadataElement(Loggable): + + def __default_translator(k): + e = [ x for x in self.dependencies() ][0] + return k[e] + def __init__(self,name): self.name = name # "Sane" defaults @@ -19,6 +25,8 @@ class MetadataElement(object): self.__is_normalized = lambda _ : True self.__max_length = -1 + + def max_length(self,l): self.__max_length = l @@ -82,6 +90,15 @@ class MetadataElement(object): if self.has_default(): return self.get_default() else: raise MetadataAbsent(self.name) # We have all dependencies. Now for actual for parsing + + # Only case where we can select a default translator + if not self.__translator: + if len(self.dependencies()) == 1: + self.translate(MetadataElement.__default_translator) + else: + self.logger.info("Could not set more than 1 translator with \ + more than 1 dependancies") + r = self.__normalizer( self.__translator(full_deps) ) if self.__max_length != -1: r = truncate_to_length(r, self.__max_length) diff --git a/python_apps/media-monitor2/media/monitor/metadata.py b/python_apps/media-monitor2/media/monitor/metadata.py index 3e7fa893d..6cce20e34 100644 --- a/python_apps/media-monitor2/media/monitor/metadata.py +++ b/python_apps/media-monitor2/media/monitor/metadata.py @@ -196,7 +196,7 @@ class Metadata(Loggable): normalized = global_reader.read('fpath', full_mutagen) self.logger.info(pformat(normalized)) except Exception as e: - self.logger.unexpected_exception(e) + self.unexpected_exception(e) if full_mutagen is None: full_mutagen = FakeMutagen(fpath) self.__metadata = Metadata.airtime_dict(full_mutagen)