From 1e3cbb64cafa5990a7ab76e16156ed45cbec7d79 Mon Sep 17 00:00:00 2001 From: Ade Date: Sun, 23 Apr 2017 20:08:28 +1200 Subject: [PATCH] beets recommendation logging --- headphones/helpers.py | 25 +++++++++++++++++++++++++ headphones/postprocessor.py | 19 ++++++++++++++----- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/headphones/helpers.py b/headphones/helpers.py index 4c815ad7..10f3cbff 100644 --- a/headphones/helpers.py +++ b/headphones/helpers.py @@ -23,6 +23,10 @@ import sys import tempfile import glob +from beets import logging as beetslogging +import six +from contextlib import contextmanager + import fnmatch import re import os @@ -975,3 +979,24 @@ def create_https_certificates(ssl_cert, ssl_key): return False return True + + +class BeetsLogCapture(beetslogging.Handler): + + def __init__(self): + beetslogging.Handler.__init__(self) + self.messages = [] + + def emit(self, record): + self.messages.append(six.text_type(record.msg)) + + +@contextmanager +def capture_beets_log(logger='beets'): + capture = BeetsLogCapture() + log = beetslogging.getLogger(logger) + log.addHandler(capture) + try: + yield capture.messages + finally: + log.removeHandler(capture) \ No newline at end of file diff --git a/headphones/postprocessor.py b/headphones/postprocessor.py index de68b9fa..e8ffc602 100755 --- a/headphones/postprocessor.py +++ b/headphones/postprocessor.py @@ -24,6 +24,7 @@ import beets import headphones from beets import autotag from beets import config as beetsconfig +from beets import logging as beetslogging from beets.mediafile import MediaFile, FileTypeError, UnreadableFileError from beetsplug import lyrics as beetslyrics from headphones import notifiers, utorrent, transmission, deluge, qbittorrent @@ -954,11 +955,19 @@ def correctMetadata(albumid, release, downloaded_track_list): continue try: - cur_artist, cur_album, prop = autotag.tag_album(items, - search_artist=release['ArtistName'], - search_album=release['AlbumTitle']) - candidates = prop.candidates - rec = prop.recommendation + logger.debug('Getting recommendation from beets. Artist: %s. Album: %s. Tracks: %s', release['ArtistName'], + release['AlbumTitle'], len(items)) + beetslog = beetslogging.getLogger('beets') + beetslog.set_global_level(beetslogging.DEBUG) + with helpers.capture_beets_log() as logs: + cur_artist, cur_album, prop = autotag.tag_album(items, + search_artist=release['ArtistName'], + search_album=release['AlbumTitle']) + candidates = prop.candidates + rec = prop.recommendation + for log in logs: + logger.debug('Beets: %s', log) + beetslog.set_global_level(beetslogging.NOTSET) except Exception as e: logger.error('Error getting recommendation: %s. Not writing metadata', e) return False