- directory_exists = os.path.exists(directory)
- if directory_exists and not recreate:
- # Already exists; should be an index! Bam, done.
- try:
- self.index = whoosh.index.open_dir(directory, indexname='MAIN')
- spell_store = whoosh.filedb.filestore.FileStorage(directory)
- self.speller = whoosh.spelling.SpellChecker(spell_store)
- return
- except whoosh.index.EmptyIndexError as e:
- # Apparently not a real index. Fall out and create it
- pass
-
- # Delete and start over if we're going to bail anyway.
- if directory_exists and recreate:
- # Be safe and only delete if it looks like a whoosh index, i.e.,
- # everything starts with _
- if all(f[0] == '_' for f in os.listdir(directory)):
- shutil.rmtree(directory)
- directory_exists = False
-
- if not directory_exists:
- os.mkdir(directory)
-
-
- ### Create index
+ if not os.path.exists(directory) or not os.listdir(directory):
+ # Directory doesn't exist OR is empty; caller needs to use
+ # rebuild_index before doing anything. Provide a dummy object that
+ # complains when used
+ self.index = UninitializedIndex()
+ self.speller = UninitializedIndex()
+ return
+
+ # Otherwise, already exists; should be an index! Bam, done.
+ # Note that this will explode if the directory exists but doesn't
+ # contain an index; that's a feature
+ try:
+ self.index = whoosh.index.open_dir(directory, indexname='MAIN')
+ except whoosh.index.EmptyIndexError:
+ raise IOError(
+ "The index directory already contains files. "
+ "Please use a dedicated directory for the lookup index."
+ )
+
+ # Create speller, and done
+ spell_store = whoosh.filedb.filestore.FileStorage(directory)
+ self.speller = whoosh.spelling.SpellChecker(spell_store)
+
+
+ def rebuild_index(self):
+ """Creates the index from scratch."""
+