File: //lib/python3/dist-packages/haystack/__init__.py
import django
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from pkg_resources import DistributionNotFound, get_distribution, parse_version
from haystack.constants import DEFAULT_ALIAS
from haystack.utils import loading
__author__ = "Daniel Lindsley"
try:
pkg_distribution = get_distribution("django-haystack")
__version__ = pkg_distribution.version
version_info = pkg_distribution.parsed_version
except DistributionNotFound:
__version__ = "0.0.dev0"
version_info = parse_version(__version__)
if django.VERSION < (3, 2):
# default_app_config is deprecated since django 3.2.
default_app_config = "haystack.apps.HaystackConfig"
# Help people clean up from 1.X.
if hasattr(settings, "HAYSTACK_SITECONF"):
raise ImproperlyConfigured(
"The HAYSTACK_SITECONF setting is no longer used & can be removed."
)
if hasattr(settings, "HAYSTACK_SEARCH_ENGINE"):
raise ImproperlyConfigured(
"The HAYSTACK_SEARCH_ENGINE setting has been replaced with HAYSTACK_CONNECTIONS."
)
if hasattr(settings, "HAYSTACK_ENABLE_REGISTRATIONS"):
raise ImproperlyConfigured(
"The HAYSTACK_ENABLE_REGISTRATIONS setting is no longer used & can be removed."
)
if hasattr(settings, "HAYSTACK_INCLUDE_SPELLING"):
raise ImproperlyConfigured(
"The HAYSTACK_INCLUDE_SPELLING setting is now a per-backend setting"
" & belongs in HAYSTACK_CONNECTIONS."
)
# Check the 2.X+ bits.
if not hasattr(settings, "HAYSTACK_CONNECTIONS"):
raise ImproperlyConfigured("The HAYSTACK_CONNECTIONS setting is required.")
if DEFAULT_ALIAS not in settings.HAYSTACK_CONNECTIONS:
raise ImproperlyConfigured(
"The default alias '%s' must be included in the HAYSTACK_CONNECTIONS setting."
% DEFAULT_ALIAS
)
# Load the connections.
connections = loading.ConnectionHandler(settings.HAYSTACK_CONNECTIONS)
# Just check HAYSTACK_ROUTERS setting validity, routers will be loaded lazily
if hasattr(settings, "HAYSTACK_ROUTERS"):
if not isinstance(settings.HAYSTACK_ROUTERS, (list, tuple)):
raise ImproperlyConfigured(
"The HAYSTACK_ROUTERS setting must be either a list or tuple."
)
# Load the router(s).
connection_router = loading.ConnectionRouter()
# Per-request, reset the ghetto query log.
# Probably not extraordinarily thread-safe but should only matter when
# DEBUG = True.
def reset_search_queries(**kwargs):
for conn in connections.all():
if conn:
conn.reset_queries()
if settings.DEBUG:
from django.core import signals as django_signals
django_signals.request_started.connect(reset_search_queries)