"""Module to handle AWS HTTP connections for Elasticsearch.""" import boto3 from opensearchpy import RequestsHttpConnection from requests_aws4auth import AWS4Auth class AWSHttpConnection(RequestsHttpConnection): """Class to handle HTTP connections authenticated with AWS. Extends `RequestsHttpConnection` to include AWS4Auth authentication in requests made to Elasticsearch. """ def perform_request( self, method, url, params=None, body=None, timeout=None, ignore=(), headers=None ): """Perform an HTTP request with AWS authentication. Args: method (str): HTTP method (GET, POST, PUT, etc.). url (str): Resource URL. params (dict, optional): Query parameters for the request. body (str, optional): Request body. timeout (float, optional): Request timeout. ignore (tuple, optional): HTTP error codes to ignore. headers (dict, optional): Additional HTTP headers. Returns: Response: HTTP request response. """ region = 'us-east-1' service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth( credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token, ) if awsauth is not None: self.session.auth = awsauth return super().perform_request( method, url, params, body, timeout, ignore, headers )