| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | 
							- from typing import Optional
 - 
 - from pydantic import Field, PositiveInt, model_validator
 - from pydantic_settings import BaseSettings
 - 
 - 
 - class ElasticsearchConfig(BaseSettings):
 -     """
 -     Configuration settings for both self-managed and Elastic Cloud deployments.
 -     Can load from environment variables or .env files.
 -     """
 - 
 -     ELASTICSEARCH_HOST: Optional[str] = Field(
 -         description="Hostname or IP address of the Elasticsearch server (e.g., 'localhost' or '192.168.1.100')",
 -         default="127.0.0.1",
 -     )
 - 
 -     ELASTICSEARCH_PORT: PositiveInt = Field(
 -         description="Port number on which the Elasticsearch server is listening (default is 9200)",
 -         default=9200,
 -     )
 - 
 -     ELASTICSEARCH_USERNAME: Optional[str] = Field(
 -         description="Username for authenticating with Elasticsearch (default is 'elastic')",
 -         default="elastic",
 -     )
 - 
 -     ELASTICSEARCH_PASSWORD: Optional[str] = Field(
 -         description="Password for authenticating with Elasticsearch (default is 'elastic')",
 -         default="elastic",
 -     )
 - 
 -     # Elastic Cloud (optional)
 -     ELASTICSEARCH_USE_CLOUD: Optional[bool] = Field(
 -         description="Set to True to use Elastic Cloud instead of self-hosted Elasticsearch", default=False
 -     )
 -     ELASTICSEARCH_CLOUD_URL: Optional[str] = Field(
 -         description="Full URL for Elastic Cloud deployment (e.g., 'https://example.es.region.aws.found.io:443')",
 -         default=None,
 -     )
 -     ELASTICSEARCH_API_KEY: Optional[str] = Field(
 -         description="API key for authenticating with Elastic Cloud", default=None
 -     )
 - 
 -     # Common options
 -     ELASTICSEARCH_CA_CERTS: Optional[str] = Field(
 -         description="Path to CA certificate file for SSL verification", default=None
 -     )
 -     ELASTICSEARCH_VERIFY_CERTS: bool = Field(
 -         description="Whether to verify SSL certificates (default is False)", default=False
 -     )
 -     ELASTICSEARCH_REQUEST_TIMEOUT: int = Field(
 -         description="Request timeout in milliseconds (default is 100000)", default=100000
 -     )
 -     ELASTICSEARCH_RETRY_ON_TIMEOUT: bool = Field(
 -         description="Whether to retry requests on timeout (default is True)", default=True
 -     )
 -     ELASTICSEARCH_MAX_RETRIES: int = Field(
 -         description="Maximum number of retry attempts (default is 10000)", default=10000
 -     )
 - 
 -     @model_validator(mode="after")
 -     def validate_elasticsearch_config(self):
 -         """Validate Elasticsearch configuration based on deployment type."""
 -         if self.ELASTICSEARCH_USE_CLOUD:
 -             if not self.ELASTICSEARCH_CLOUD_URL:
 -                 raise ValueError("ELASTICSEARCH_CLOUD_URL is required when using Elastic Cloud")
 -             if not self.ELASTICSEARCH_API_KEY:
 -                 raise ValueError("ELASTICSEARCH_API_KEY is required when using Elastic Cloud")
 -         else:
 -             if not self.ELASTICSEARCH_HOST:
 -                 raise ValueError("ELASTICSEARCH_HOST is required for self-hosted Elasticsearch")
 -             if not self.ELASTICSEARCH_USERNAME:
 -                 raise ValueError("ELASTICSEARCH_USERNAME is required for self-hosted Elasticsearch")
 -             if not self.ELASTICSEARCH_PASSWORD:
 -                 raise ValueError("ELASTICSEARCH_PASSWORD is required for self-hosted Elasticsearch")
 - 
 -         return self
 
 
  |