Skip to content

Commit 5346169

Browse files
committed
Fixed a bug where signals wouldn't get setup properly, especially on RealTimeSearchIndex. Thanks to byoungb for the report!
1 parent d94618e commit 5346169

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

haystack/utils/loading.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def __getitem__(self, key):
9393
return self._connections[key]
9494

9595
def all(self):
96-
return [self[alias] for alias in self._connections]
96+
return [self[alias] for alias in self.connections_info]
9797

9898

9999
class ConnectionRouter(object):
@@ -133,6 +133,7 @@ def __init__(self):
133133
self.indexes = {}
134134
self.fields = SortedDict()
135135
self._built = False
136+
self._indexes_setup = False
136137
self.excluded_indexes = getattr(settings, 'HAYSTACK_EXCLUDED_INDEXES', [])
137138
self.document_field = getattr(settings, 'HAYSTACK_DOCUMENT_FIELD', 'text')
138139
self._fieldnames = {}
@@ -250,10 +251,15 @@ def collect_fields(self, index):
250251
def setup_indexes(self):
251252
if not self._built:
252253
self.build()
253-
254+
255+
if self._indexes_setup:
256+
return
257+
254258
for model_ct, index in self.indexes.items():
255259
index._setup_save()
256260
index._setup_delete()
261+
262+
self._indexes_setup = True
257263

258264
def teardown_indexes(self):
259265
if not self._built:
@@ -262,6 +268,8 @@ def teardown_indexes(self):
262268
for model_ct, index in self.indexes.items():
263269
index._teardown_save()
264270
index._teardown_delete()
271+
272+
self._indexes_setup = False
265273

266274
def get_indexed_models(self):
267275
if not self._built:

tests/discovery/tests.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ def test_discovery(self):
4444
connections['default']._index = old_ui
4545

4646
def test_signal_setup_handling(self):
47+
old_ui = connections['default'].get_unified_index()
48+
connections['default']._index = UnifiedIndex()
49+
self.assertEqual(connections['default'].get_unified_index()._indexes_setup, False)
4750
foo_1 = Foo.objects.create(
4851
title='chekin sigalz',
4952
body='stuff'
@@ -56,12 +59,15 @@ def test_signal_setup_handling(self):
5659
existing_foo = sqs.filter(id='discovery.foo.1')[0]
5760
self.assertEqual(existing_foo.text, u'stuff')
5861

62+
fi.clear()
5963
foo_1 = Foo.objects.get(pk=1)
6064
foo_1.title = 'Checking signals'
6165
foo_1.body = 'Stuff.'
6266
# This save should trigger an update.
6367
foo_1.save()
68+
self.assertEqual(connections['default'].get_unified_index()._indexes_setup, True)
6469

6570
sqs = SearchQuerySet()
6671
new_foo = sqs.filter(id='discovery.foo.1')[0]
6772
self.assertEqual(new_foo.text, u'Stuff.')
73+
connections['default']._index = old_ui

0 commit comments

Comments
 (0)