Refactor zero plugin

This commit is contained in:
Thomas Scholtes 2014-04-10 22:01:04 +02:00
parent b322e3dda7
commit c27d26ddbf

View file

@ -24,11 +24,12 @@ from beets.util import confit
__author__ = 'baobab@heresiarch.info' __author__ = 'baobab@heresiarch.info'
__version__ = '0.10' __version__ = '0.10'
log = logging.getLogger('beets')
class ZeroPlugin(BeetsPlugin): class ZeroPlugin(BeetsPlugin):
_instance = None _instance = None
_log = logging.getLogger('beets')
def __init__(self): def __init__(self):
super(ZeroPlugin, self).__init__() super(ZeroPlugin, self).__init__()
@ -45,19 +46,21 @@ class ZeroPlugin(BeetsPlugin):
self.patterns = {} self.patterns = {}
self.warned = False self.warned = False
for f in self.config['fields'].as_str_seq(): for field in self.config['fields'].as_str_seq():
if f not in Item._fields.keys(): if field not in Item._fields.keys():
self._log.error(u'[zero] invalid field: {0}'.format(f)) log.error(u'[zero] invalid field: {0}'.format(field))
else: continue
try:
self.patterns[f] = self.config[f].as_str_seq() try:
except confit.NotFoundError: self.patterns[field] = self.config[field].as_str_seq()
self.patterns[f] = [u''] except confit.NotFoundError:
# Matches everything
self.patterns[field] = [u'']
def import_task_choice_event(self, session, task): def import_task_choice_event(self, session, task):
"""Listen for import_task_choice event.""" """Listen for import_task_choice event."""
if task.choice_flag == action.ASIS and not self.warned: if task.choice_flag == action.ASIS and not self.warned:
self._log.warn(u'[zero] cannot zero in \"as-is\" mode') log.warn(u'[zero] cannot zero in \"as-is\" mode')
self.warned = True self.warned = True
# TODO request write in as-is mode # TODO request write in as-is mode
@ -74,22 +77,16 @@ class ZeroPlugin(BeetsPlugin):
def write_event(self, item): def write_event(self, item):
"""Listen for write event.""" """Listen for write event."""
if not self.patterns: if not self.patterns:
self._log.warn(u'[zero] no fields, nothing to do') log.warn(u'[zero] no fields, nothing to do')
return return
for fn, patterns in self.patterns.items():
for field, patterns in self.patterns.items():
try: try:
fval = getattr(item, fn) value = getattr(item, field)
except AttributeError: except AttributeError:
self._log.error(u'[zero] no such field: {0}'.format(fn)) log.error(u'[zero] no such field: {0}'.format(field))
else: continue
if not self.match_patterns(fval, patterns):
self._log.debug(u'[zero] \"{0}\" ({1}) not match: {2}' if self.match_patterns(value, patterns):
.format(fval, fn, log.debug(u'[zero] {0}: {1} -> None'.format(field, value))
' '.join(patterns))) setattr(item, field, None)
continue
self._log.debug(u'[zero] \"{0}\" ({1}) match: {2}'
.format(fval, fn, ' '.join(patterns)))
new_val = None if fval is None else type(fval)()
setattr(item, fn, new_val)
self._log.debug(u'[zero] {0}={1}'
.format(fn, getattr(item, fn)))