Coverage for conf/settings/elasticsearch.py: 90%
19 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 06:14 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 06:14 +0000
1"""This file contains configuration pertaining to Elasticsearch."""
3from decouple import config
4from elasticsearch import Elasticsearch
5from elasticsearch_dsl import connections
7from api.constants.media_types import MEDIA_TYPES
10def _elasticsearch_connect() -> tuple[Elasticsearch, str]:
11 """
12 Connect to configured Elasticsearch domain.
14 :return: An Elasticsearch connection object.
15 """
17 es_scheme = config("ELASTICSEARCH_SCHEME", default="http://")
18 es_url = config("ELASTICSEARCH_URL", default="localhost")
19 es_port = config("ELASTICSEARCH_PORT", default=9200, cast=int)
21 es_endpoint = f"{es_scheme}{es_url}:{es_port}"
23 _es = Elasticsearch(
24 es_endpoint,
25 # TODO: Return to default timeout of 10s and 1 retry once
26 # TODO: Elasticsearch response time has been stabilized
27 request_timeout=12,
28 max_retries=3,
29 retry_on_timeout=True,
30 )
31 _es.info()
32 _es.cluster.health(wait_for_status="yellow")
33 return _es, es_endpoint
36SETUP_ES = config("SETUP_ES", default=True, cast=bool)
37if SETUP_ES: 37 ↛ 43line 37 didn't jump to line 43 because the condition on line 37 was always true
38 ES, ES_ENDPOINT = _elasticsearch_connect()
39 #: Elasticsearch client, also aliased to connection 'default'
41 connections.add_connection("default", ES)
42else:
43 ES, ES_ENDPOINT = None, None
45MEDIA_INDEX_MAPPING = {
46 media_type: config(f"{media_type.upper()}_INDEX_NAME", default=media_type)
47 for media_type in MEDIA_TYPES
48}
49#: mapping of media types to Elasticsearch index names