From 9c4d03c954d237d4d62cb74414c3eda63c1bb942 Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Sat, 8 Oct 2011 19:01:16 +0100
Subject: [PATCH] add a little tool to rebuild the SOLR index

---
 server/djrandom/model/indexer.py |  3 ++
 server/djrandom/model/verify.py  | 48 ++++++++++++++++++++++++++++++++
 server/setup.py                  |  1 +
 3 files changed, 52 insertions(+)
 create mode 100644 server/djrandom/model/verify.py

diff --git a/server/djrandom/model/indexer.py b/server/djrandom/model/indexer.py
index 7022ba0..2ec9bd2 100644
--- a/server/djrandom/model/indexer.py
+++ b/server/djrandom/model/indexer.py
@@ -32,5 +32,8 @@ class Indexer(object):
     def del_mp3(self, mp3):
         self._get_solr().delete(mp3.sha1)
 
+    def delete_all(self):
+        self._get_solr().delete_query('id:*')
+
     def commit(self):
         self._get_solr().commit()
diff --git a/server/djrandom/model/verify.py b/server/djrandom/model/verify.py
new file mode 100644
index 0000000..c0f447c
--- /dev/null
+++ b/server/djrandom/model/verify.py
@@ -0,0 +1,48 @@
+import os
+import optparse
+import logging
+import time
+from djrandom import daemonize
+from djrandom import utils
+from djrandom.database import Session, init_db, indexer
+from djrandom.model.mp3 import MP3
+
+log = logging.getLogger(__name__)
+
+
+def fix_solr():
+    print 'rebuilding the SOLR index...'
+    for mp3 in MP3.query:
+        indexer.add_mp3(mp3)
+    print 'commit...'
+    indexer.commit()
+    print 'done.'
+
+
+def run_fixer(db_url, solr_url):
+    init_db(db_url, solr_url)
+    fix_solr()
+
+
+def main():
+    parser = optparse.OptionParser()
+    parser.add_option('--solr_url', default='http://localhost:8080/solr')
+    parser.add_option('--db_url')
+    daemonize.add_standard_options(parser)
+    utils.read_config_defaults(
+        parser, os.getenv('DJRANDOM_CONF', '/etc/djrandom.conf'))
+    opts, args = parser.parse_args()
+    if not opts.db_url:
+        parser.error('Must provide --db_url')
+    if args:
+        parser.error('Too many arguments')
+
+    if opts.once:
+        opts.foreground = True
+
+    daemonize.daemonize(opts, run_fixer,
+                        (opts.solr_url, opts.db_url))
+
+
+if __name__ == '__main__':
+    main()
diff --git a/server/setup.py b/server/setup.py
index 22f935b..7cb08e7 100644
--- a/server/setup.py
+++ b/server/setup.py
@@ -23,6 +23,7 @@ setup(
       "djrandom-frontend = djrandom.frontend.frontend:main",
       "djrandom-update-markov = djrandom.model.markov:main",
       "djrandom-metadata-fixer = djrandom.metadata_fixer.metadata_fixer:main",
+      "djrandom-solr-fixer = djrandom.model.verify:main",
     ],
   },
   )
-- 
GitLab