X-Git-Url: http://git.kaliko.me/?a=blobdiff_plain;f=sima%2Flib%2Fmeta.py;h=78c6e790da198bc351e0c58c79a7307b5b5db2c0;hb=e9ed5c171c9251ef6ae7765b1406e2f5b2cb1c0d;hp=32bb883dca5dd861a0b1f21b9fec89055edfc3c7;hpb=1b5cfb4c9187df891bd840b51c044d72ad0077d5;p=mpd-sima.git diff --git a/sima/lib/meta.py b/sima/lib/meta.py index 32bb883..78c6e79 100644 --- a/sima/lib/meta.py +++ b/sima/lib/meta.py @@ -21,6 +21,7 @@ Defines some object to handle audio file metadata """ +import logging import re UUID_RE = r'^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$' @@ -38,24 +39,40 @@ class MetaException(Exception): class WrongUUID4(MetaException): pass +def mbidfilter(func): + def wrapper(*args, **kwargs): + cls = args[0] + if not cls.use_mbid: + kwargs.pop('mbid', None) + kwargs.pop('musicbrainz_artistid', None) + kwargs.pop('musicbrainz_albumartistid', None) + func(*args, **kwargs) + return wrapper + class Meta: """Generic Class for Meta object Meta(name=[, mbid=UUID4]) """ + use_mbid = True def __init__(self, **kwargs): self.__name = None #TODO: should be immutable self.__mbid = None self.__aliases = set() + self.log = logging.getLogger(__name__) if 'name' not in kwargs or not kwargs.get('name'): raise MetaException('Need a "name" argument') else: self.__name = kwargs.pop('name') if 'mbid' in kwargs and kwargs.get('mbid'): - is_uuid4(kwargs.get('mbid')) + try: + is_uuid4(kwargs.get('mbid')) + self.__mbid = kwargs.pop('mbid') + except WrongUUID4: + self.log.warning('Wrong mbid {}:{}'.format(self.__name, + kwargs.get('mbid'))) # mbid immutable as hash rests on - self.__mbid = kwargs.pop('mbid') self.__dict__.update(**kwargs) def __repr__(self): @@ -117,6 +134,7 @@ class Album(Meta): class Artist(Meta): + @mbidfilter def __init__(self, name=None, mbid=None, **kwargs): """Artist object built from a mapping dict containing at least an "artist" entry: