From ae8e954cbe62b5271c1403d8a12e70a97f38f265 Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Mon, 10 Oct 2011 19:59:37 +0200 Subject: [PATCH] add support for rebuilding metadata of songs with partial tags --- .../djrandom/metadata_fixer/metadata_fixer.py | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/server/djrandom/metadata_fixer/metadata_fixer.py b/server/djrandom/metadata_fixer/metadata_fixer.py index c89ed8f..3b5660f 100644 --- a/server/djrandom/metadata_fixer/metadata_fixer.py +++ b/server/djrandom/metadata_fixer/metadata_fixer.py @@ -63,16 +63,27 @@ class MetadataFixer(object): mp3.title = metadata.normalize_string(info['title']) mp3.artist = metadata.normalize_string(info['artist_name']) - def scan(self): + def scan(self, dry_run, partial): """Scan the database for new files.""" n_bad = n_ok = n_err = 0 - for mp3 in MP3.get_with_bad_metadata(): + if partial: + entries = MP3.query.filter( + (MP3.state == MP3.READY) + & (MP3.has_fingerprint == True) + & ((MP3.artist == None) + | (MP3.artist == '') + | (MP3.title == '') + | (MP3.title == None))) + else: + entries = MP3.get_with_bad_metadata() + for mp3 in entries: n_bad += 1 log.info('searching metadata for %s' % mp3.sha1) try: self.process(mp3) mp3.state = MP3.READY - self.idx.add_mp3(mp3) + if not dry_run: + self.idx.add_mp3(mp3) log.info('found: %s / %s' % (mp3.artist, mp3.title)) n_ok += 1 except NoMetadataError: @@ -82,34 +93,38 @@ class MetadataFixer(object): log.error(traceback.format_exc()) n_err += 1 mp3.state = MP3.ERROR - Session.add(mp3) - Session.commit() - self.idx.commit() + if not dry_run: + Session.add(mp3) + if not dry_run: + Session.commit() + self.idx.commit() log.debug('total: %d songs, found: %d' % (n_bad, n_ok)) - def run(self, run_once): + def run(self, run_once, dry_run, partial): while True: - self.scan() + self.scan(dry_run, partial) if run_once: break Session.remove() time.sleep(600) -def run_fixer(solr_url, echonest_api_key, db_url, run_once): +def run_fixer(solr_url, echonest_api_key, db_url, dry_run, partial, run_once): socket.setdefaulttimeout(300) init_db(db_url) fixer = MetadataFixer(solr_url, echonest_api_key) - fixer.run(run_once) + fixer.run(run_once, dry_run, partial) def main(): parser = optparse.OptionParser() parser.add_option('--once', action='store_true') + parser.add_option('--dry_run', action='store_true') parser.add_option('--solr_url', default='http://localhost:8080/solr') parser.add_option('--echonest_api_key') parser.add_option('--db_url') + parser.add_option('--partial', action='store_true') daemonize.add_standard_options(parser) utils.read_config_defaults( parser, os.getenv('DJRANDOM_CONF', '/etc/djrandom.conf')) @@ -125,8 +140,8 @@ def main(): opts.foreground = True daemonize.daemonize(opts, run_fixer, - (opts.solr_url, opts.echonest_api_key, - opts.db_url, opts.once)) + (opts.solr_url, opts.echonest_api_key, opts.db_url, + opts.dry_run, opts.partial, opts.once)) if __name__ == '__main__': -- GitLab