Clean up & fix index creation, handling exceptions

This commit is contained in:
Fabian Schlager 2014-11-21 17:11:27 +01:00
parent d8e7ed7ad4
commit a8f61dfb13

View file

@ -1,3 +1,5 @@
import sys
from flask import g, current_app from flask import g, current_app
from realms.lib.util import filename_to_cname from realms.lib.util import filename_to_cname
@ -7,13 +9,6 @@ def simple(app):
def whoosh(app): def whoosh(app):
import os
import sys
for mode in [os.W_OK, os.R_OK]:
if not os.access(app.config['WHOOSH_INDEX'], mode):
sys.exit('Read and write access to WHOOSH_INDEX is required (%s)' %
app.config['WHOOSH_INDEX'])
return WhooshSearch(app.config['WHOOSH_INDEX'], app.config['WHOOSH_LANGUAGE']) return WhooshSearch(app.config['WHOOSH_INDEX'], app.config['WHOOSH_LANGUAGE'])
@ -61,7 +56,7 @@ class WhooshSearch(BaseSearch):
from whoosh.highlight import UppercaseFormatter from whoosh.highlight import UppercaseFormatter
from whoosh.analysis import SimpleAnalyzer, LanguageAnalyzer from whoosh.analysis import SimpleAnalyzer, LanguageAnalyzer
from whoosh.lang import has_stemmer, has_stopwords from whoosh.lang import has_stemmer, has_stopwords
import os.path import os
if not has_stemmer(language) or not has_stopwords(language): if not has_stemmer(language) or not has_stopwords(language):
# TODO Display a warning? # TODO Display a warning?
@ -73,10 +68,19 @@ class WhooshSearch(BaseSearch):
self.formatter = UppercaseFormatter() self.formatter = UppercaseFormatter()
self.index_path = index_path self.index_path = index_path
if os.path.exists(index_path):
self.search_index = whoosh_index.open_dir(index_path) if not os.path.exists(index_path):
try:
os.mkdir(index_path)
except OSError as e:
sys.exit("Error creating Whoosh index: %s" % e)
if whoosh_index.exists_in(index_path):
try:
self.search_index = whoosh_index.open_dir(index_path)
except whoosh_index.IndexError as e:
sys.exit("Error opening whoosh index: %s" % (e))
else: else:
os.mkdir(index_path)
self.search_index = whoosh_index.create_in(index_path, self.schema) self.search_index = whoosh_index.create_in(index_path, self.schema)
self.query_parser = qparser.MultifieldParser(["body", "path"], schema=self.schema) self.query_parser = qparser.MultifieldParser(["body", "path"], schema=self.schema)