"""Elasticsearch connector.""" from aws_requests_auth.boto_utils import BotoAWSRequestsAuth from opensearchpy import OpenSearch, RequestsHttpConnection, Transport from vectororder import config from vectororder.constants import search def get_os_client() -> OpenSearch | None: """Get OpenSearch client for Opensearch instance. Returns: mixed: OpenSearch client instance or None if not configured. """ if not all((config.OPENSEARCH_HOST, config.OPENSEARCH_PORT)): return None auth = BotoAWSRequestsAuth( aws_host=config.OPENSEARCH_HOST, aws_region=config.AWS_REGION, aws_service="es", ) hosts = [ { "host": config.OPENSEARCH_HOST, "port": config.OPENSEARCH_PORT, "timeout": config.OPENSEARCH_DEFAULT_TIMEOUT, } ] host_config = { "use_ssl": config.OPENSEARCH_PORT == 443, "connection_class": RequestsHttpConnection, "http_auth": auth, "pool_maxsize": config.OPENSEARCH_POOL_MAXSIZE, } return OpenSearch(hosts=hosts, transport_class=Transport, **host_config) os_client = get_os_client() def get_client() -> OpenSearch | None: """Get Opensearch client instance.""" return os_client def get_index_name() -> str: """Get Opensearch alias name.""" return search.OS_VO_DETAIL_INDEX_NAME