import enum from typing import Literal, Optional from pydantic import Field, PositiveInt from pydantic_settings import BaseSettings class OpenSearchConfig(BaseSettings): """ Configuration settings for OpenSearch """ class AuthMethod(enum.StrEnum): """ Authentication method for OpenSearch """ BASIC = "basic" AWS_MANAGED_IAM = "aws_managed_iam" OPENSEARCH_HOST: Optional[str] = Field( description="Hostname or IP address of the OpenSearch server (e.g., 'localhost' or 'opensearch.example.com')", default=None, ) OPENSEARCH_PORT: PositiveInt = Field( description="Port number on which the OpenSearch server is listening (default is 9200)", default=9200, ) OPENSEARCH_SECURE: bool = Field( description="Whether to use SSL/TLS encrypted connection for OpenSearch (True for HTTPS, False for HTTP)", default=False, ) OPENSEARCH_VERIFY_CERTS: bool = Field( description="Whether to verify SSL certificates for HTTPS connections (recommended to set True in production)", default=True, ) OPENSEARCH_AUTH_METHOD: AuthMethod = Field( description="Authentication method for OpenSearch connection (default is 'basic')", default=AuthMethod.BASIC, ) OPENSEARCH_USER: Optional[str] = Field( description="Username for authenticating with OpenSearch", default=None, ) OPENSEARCH_PASSWORD: Optional[str] = Field( description="Password for authenticating with OpenSearch", default=None, ) OPENSEARCH_AWS_REGION: Optional[str] = Field( description="AWS region for OpenSearch (e.g. 'us-west-2')", default=None, ) OPENSEARCH_AWS_SERVICE: Optional[Literal["es", "aoss"]] = Field( description="AWS service for OpenSearch (e.g. 'aoss' for OpenSearch Serverless)", default=None )