diff --git a/elasticsearch_serverless/_sync/client/utils.py b/elasticsearch_serverless/_sync/client/utils.py index ad890a4..0c92fc3 100644 --- a/elasticsearch_serverless/_sync/client/utils.py +++ b/elasticsearch_serverless/_sync/client/utils.py @@ -60,6 +60,7 @@ # Default User-Agent used by the client USER_AGENT = create_user_agent("elasticsearch-py", __versionstr__) +ELASTIC_API_VERSION = "2023-10-31" _TYPE_HOST = Union[str, Mapping[str, Union[str, int]], NodeConfig] @@ -97,6 +98,8 @@ def client_node_config( # Set the 'User-Agent' default header. headers = HttpHeaders(node_options.pop("headers", ())) headers.setdefault("user-agent", USER_AGENT) + headers.setdefault("elastic-api-version", ELASTIC_API_VERSION) + node_options["headers"] = headers # If a custom Requests AuthBase is passed we set that via '_extras'. @@ -112,6 +115,8 @@ def client_node_config( headers.update(headers_to_add) headers.setdefault("user-agent", USER_AGENT) + headers.setdefault("elastic-api-version", ELASTIC_API_VERSION) + headers.freeze() node_options["headers"] = headers diff --git a/test_elasticsearch_serverless/test_client/test_options.py b/test_elasticsearch_serverless/test_client/test_options.py index 8fa2cbe..94a5051 100644 --- a/test_elasticsearch_serverless/test_client/test_options.py +++ b/test_elasticsearch_serverless/test_client/test_options.py @@ -20,7 +20,7 @@ from elastic_transport.client_utils import DEFAULT from elasticsearch_serverless import AsyncElasticsearch, Elasticsearch -from elasticsearch_serverless._sync.client.utils import USER_AGENT +from elasticsearch_serverless._sync.client.utils import ELASTIC_API_VERSION, USER_AGENT from test_elasticsearch_serverless.test_cases import ( DummyAsyncTransport, DummyTransport, @@ -279,7 +279,10 @@ def test_default_node_configs(self): assert node_config.host == "localhost" assert node_config.port == 9200 assert node_config.path_prefix == "" - assert node_config.headers == {"user-agent": USER_AGENT} + assert node_config.headers == { + "user-agent": USER_AGENT, + "elastic-api-version": ELASTIC_API_VERSION, + } def test_http_headers_overrides(self): client = Elasticsearch( @@ -324,6 +327,7 @@ def test_http_headers_overrides(self): assert node_config.headers == { "authorization": "Basic dXNlcm5hbWU6cGFzc3dvcmQ=", "user-agent": USER_AGENT, + "elastic-api-version": ELASTIC_API_VERSION, } assert client._headers == {"key": "val"} diff --git a/test_elasticsearch_serverless/test_transport.py b/test_elasticsearch_serverless/test_transport.py index 66328ab..1e8cc85 100644 --- a/test_elasticsearch_serverless/test_transport.py +++ b/test_elasticsearch_serverless/test_transport.py @@ -25,6 +25,7 @@ from elastic_transport.client_utils import DEFAULT from elasticsearch_serverless import Elasticsearch, __versionstr__ +from elasticsearch_serverless._sync.client import utils from elasticsearch_serverless.exceptions import ( ApiError, ConnectionError, @@ -189,8 +190,9 @@ def test_custom_user_agent_on_initialization(self): "http://localhost:9200", headers={"user-agent": "custom/1.2.3"} ) headers = [node.config for node in client.transport.node_pool.all()][0].headers - assert list(headers.keys()) == ["user-agent"] + assert list(headers.keys()) == ["user-agent", "elastic-api-version"] assert headers["user-agent"].startswith(f"elasticsearch-py/{__versionstr__} (") + assert headers["elastic-api-version"] == utils.ELASTIC_API_VERSION def test_request_with_custom_user_agent_header(self): client = Elasticsearch(