Skip to content

Commit f27e469

Browse files
committed
chg: Moved signal processor loading to app_config.ready
Thanks to @claudep for the patch Closes django-haystack#1260
1 parent 2df8d6d commit f27e469

File tree

4 files changed

+42
-25
lines changed

4 files changed

+42
-25
lines changed

haystack/__init__.py

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
from __future__ import absolute_import, division, print_function, unicode_literals
44

5-
import logging
6-
75
from django.conf import settings
86
from django.core.exceptions import ImproperlyConfigured
97

@@ -15,12 +13,7 @@
1513
__author__ = 'Daniel Lindsley'
1614
__version__ = (2, 5, 'dev0')
1715

18-
19-
# Setup default logging.
20-
log = logging.getLogger('haystack')
21-
stream = logging.StreamHandler()
22-
stream.setLevel(logging.INFO)
23-
log.addHandler(stream)
16+
default_app_config = 'haystack.apps.HaystackConfig'
2417

2518

2619
# Help people clean up from 1.X.
@@ -51,11 +44,6 @@
5144
# Load the router(s).
5245
connection_router = loading.ConnectionRouter()
5346

54-
# Setup the signal processor.
55-
signal_processor_path = getattr(settings, 'HAYSTACK_SIGNAL_PROCESSOR', 'haystack.signals.BaseSignalProcessor')
56-
signal_processor_class = loading.import_class(signal_processor_path)
57-
signal_processor = signal_processor_class(connections, connection_router)
58-
5947

6048
# Per-request, reset the ghetto query log.
6149
# Probably not extraordinarily thread-safe but should only matter when

haystack/apps.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from __future__ import unicode_literals
2+
3+
import logging
4+
5+
from django.apps import AppConfig
6+
from django.conf import settings
7+
8+
from haystack import connection_router, connections
9+
from haystack.utils import loading
10+
11+
12+
class HaystackConfig(AppConfig):
13+
name = 'haystack'
14+
signal_processor = None
15+
stream = None
16+
17+
def ready(self):
18+
# Setup default logging.
19+
log = logging.getLogger('haystack')
20+
self.stream = logging.StreamHandler()
21+
self.stream.setLevel(logging.INFO)
22+
log.addHandler(self.stream)
23+
24+
# Setup the signal processor.
25+
if not self.signal_processor:
26+
signal_processor_path = getattr(settings, 'HAYSTACK_SIGNAL_PROCESSOR', 'haystack.signals.BaseSignalProcessor')
27+
signal_processor_class = loading.import_class(signal_processor_path)
28+
self.signal_processor = signal_processor_class(connections, connection_router)

test_haystack/elasticsearch_tests/test_elasticsearch_backend.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from decimal import Decimal
99

1010
import elasticsearch
11+
from django.apps import apps
1112
from django.conf import settings
1213
from django.test import TestCase
1314
from django.test.utils import override_settings
@@ -16,7 +17,7 @@
1617
from haystack.exceptions import SkipDocument
1718
from haystack.inputs import AutoQuery
1819
from haystack.models import SearchResult
19-
from haystack.query import RelatedSearchQuerySet, SearchQuerySet, SQ
20+
from haystack.query import SQ, RelatedSearchQuerySet, SearchQuerySet
2021
from haystack.utils import log as logging
2122
from haystack.utils.geo import Point
2223
from haystack.utils.loading import UnifiedIndex
@@ -569,8 +570,8 @@ def setUp(self):
569570
settings.HAYSTACK_CONNECTIONS['elasticsearch']['URL'] = "%s/foo/" % self.old_es_url
570571
self.cap = CaptureHandler()
571572
logging.getLogger('haystack').addHandler(self.cap)
572-
import haystack
573-
logging.getLogger('haystack').removeHandler(haystack.stream)
573+
config = apps.get_app_config('haystack')
574+
logging.getLogger('haystack').removeHandler(config.stream)
574575

575576
# Setup the rest of the bits.
576577
self.old_ui = connections['elasticsearch'].get_unified_index()
@@ -581,12 +582,12 @@ def setUp(self):
581582
self.sb = connections['elasticsearch'].get_backend()
582583

583584
def tearDown(self):
584-
import haystack
585585
# Restore.
586586
settings.HAYSTACK_CONNECTIONS['elasticsearch']['URL'] = self.old_es_url
587587
connections['elasticsearch']._index = self.old_ui
588+
config = apps.get_app_config('haystack')
588589
logging.getLogger('haystack').removeHandler(self.cap)
589-
logging.getLogger('haystack').addHandler(haystack.stream)
590+
logging.getLogger('haystack').addHandler(config.stream)
590591

591592
@unittest.expectedFailure
592593
def test_all_cases(self):

test_haystack/multipleindex/__init__.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@
55
import haystack
66
from haystack.signals import RealtimeSignalProcessor
77

8-
from django.db.models import signals
8+
from django.apps import apps
99

1010
from ..utils import check_solr
1111

1212
_old_sp = None
1313
def setup():
1414
check_solr()
1515
global _old_sp
16-
_old_sp = haystack.signal_processor
17-
haystack.signal_processor = RealtimeSignalProcessor(haystack.connections, haystack.connection_router)
16+
config = apps.get_app_config('haystack')
17+
_old_sp = config.signal_processor
18+
config.signal_processor = RealtimeSignalProcessor(haystack.connections, haystack.connection_router)
1819

1920
def teardown():
20-
haystack.signal_processor = _old_sp
21-
signals.post_save.receivers = []
22-
signals.post_delete.receivers = []
23-
21+
config = apps.get_app_config('haystack')
22+
config.signal_processor.teardown()
23+
config.signal_processor = _old_sp

0 commit comments

Comments
 (0)