Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-elasticsearch for
openSUSE:Factory checked in at 2026-10-23 20:22:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-elasticsearch (Old)
and /work/SRC/openSUSE:Factory/.python-elasticsearch.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-elasticsearch"
Fri Oct 23 20:22:07 2026 rev:27 rq:1387081 version:9.5.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-elasticsearch/python-elasticsearch.changes
2026-08-24 12:01:52.790200181 +0200
+++
/work/SRC/openSUSE:Factory/.python-elasticsearch.new.2252680/python-elasticsearch.changes
2026-10-23 20:22:37.767331735 +0200
@@ -1,0 +2,12 @@
+Thu Oct 22 11:30:00 UTC 2026 - Markéta Machová <[email protected]>
+
+- update to 9.5.1
+ * Added esql.delete_data_source, esql.get_data_source, and
+ esql.put_data_source APIs
+ * Updated SemanticText.inference_id default when the Elastic
+ Inference Service is available
+ * Fixed DenseVectorIndexOptions to include missing bbq_disk
+ properties
+ * confidence_interval on DenseVectorIndexOptions is deprecated
+
+-------------------------------------------------------------------
Old:
----
v9.5.0.tar.gz
New:
----
v9.5.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-elasticsearch.spec ++++++
--- /var/tmp/diff_new_pack.5SwJUo/_old 2026-10-23 20:22:38.711370937 +0200
+++ /var/tmp/diff_new_pack.5SwJUo/_new 2026-10-23 20:22:38.714371061 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-elasticsearch
-Version: 9.5.0
+Version: 9.5.1
Release: 0
Summary: Python client for Elasticsearch
License: Apache-2.0
++++++ v9.5.0.tar.gz -> v9.5.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/elasticsearch-py-9.5.0/.buildkite/pipeline.yml
new/elasticsearch-py-9.5.1/.buildkite/pipeline.yml
--- old/elasticsearch-py-9.5.0/.buildkite/pipeline.yml 2026-08-04
03:45:57.000000000 +0200
+++ new/elasticsearch-py-9.5.1/.buildkite/pipeline.yml 2026-08-31
21:30:18.000000000 +0200
@@ -5,7 +5,7 @@
env:
PYTHON_VERSION: "{{ matrix.python }}"
TEST_SUITE: "platinum"
- STACK_VERSION: "9.5.0-SNAPSHOT"
+ STACK_VERSION: "9.5.3-SNAPSHOT"
PYTHON_CONNECTION_CLASS: "{{ matrix.connection }}"
NOX_SESSION: "{{ matrix.nox_session }}"
matrix:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/elasticsearch-py-9.5.0/.github/workflows/pypi-publish.yml
new/elasticsearch-py-9.5.1/.github/workflows/pypi-publish.yml
--- old/elasticsearch-py-9.5.0/.github/workflows/pypi-publish.yml
1970-01-01 01:00:00.000000000 +0100
+++ new/elasticsearch-py-9.5.1/.github/workflows/pypi-publish.yml
2026-08-31 21:30:18.000000000 +0200
@@ -0,0 +1,90 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name: Publish to PyPI
+
+on:
+ release:
+ types: [published]
+ workflow_dispatch:
+ inputs:
+ version:
+ description: "Existing release tag to publish (e.g. 9.5.1 or v9.5.1).
The tag must already exist."
+ required: true
+ type: string
+
+permissions: {}
+
+jobs:
+ build:
+ name: Build distributions
+ runs-on: ubuntu-latest
+ steps:
+ - name: Derive release tag
+ id: tag
+ run: |
+ if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
+ version="${{ github.event.inputs.version }}"
+ else
+ version="${{ github.event.release.tag_name }}"
+ fi
+ version="${version#v}"
+ echo "version=$version" >> "$GITHUB_OUTPUT"
+ echo "name=v$version" >> "$GITHUB_OUTPUT"
+
+ - uses: actions/checkout@v5
+ with:
+ ref: ${{ steps.tag.outputs.name }}
+
+ - name: Verify package version matches tag
+ run: |
+ actual=$(sed -n 's/^__versionstr__ = "\(.*\)"/\1/p'
elasticsearch/_version.py)
+ expected="${{ steps.tag.outputs.version }}"
+ if [ "$actual" != "$expected" ]; then
+ echo "elasticsearch/_version.py is $actual, tag is $expected"
+ exit 1
+ fi
+
+ - uses: actions/setup-python@v5
+ with:
+ python-version: "3.x"
+
+ - name: Install build dependencies
+ run: python -m pip install build
+
+ - name: Build dists
+ run: python utils/build-dists.py
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: dists
+ path: dist/
+
+ publish:
+ name: Publish to PyPI
+ needs: build
+ runs-on: ubuntu-latest
+ environment: pypi
+ permissions:
+ id-token: write
+ steps:
+ - uses: actions/download-artifact@v4
+ with:
+ name: dists
+ path: dist/
+
+ - uses: pypa/gh-action-pypi-publish@release/v1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/elasticsearch-py-9.5.0/docs/release-notes/index.md
new/elasticsearch-py-9.5.1/docs/release-notes/index.md
--- old/elasticsearch-py-9.5.0/docs/release-notes/index.md 2026-08-04
03:45:57.000000000 +0200
+++ new/elasticsearch-py-9.5.1/docs/release-notes/index.md 2026-08-31
21:30:18.000000000 +0200
@@ -18,6 +18,21 @@
% *
% ### Fixes [elasticsearch-python-client-next-fixes]
+## 9.5.1 (2026-08-31)
+
+API
+
+* Added `esql.delete_data_source`, `esql.get_data_source`, and
`esql.put_data_source` APIs
+
+DSL
+
+* Updated `SemanticText.inference_id` default from `.elser-2-elasticsearch` to
`.jina-embeddings-v5-text-small` when the Elastic Inference Service is available
+
+Fixes
+
+* Fixed `DenseVectorIndexOptions` to include missing `bbq_disk` properties:
`cluster_size`, `default_visit_percentage`, `bits`, `precondition`, and
`auto_calibrate`
+* `confidence_interval` on `DenseVectorIndexOptions` is now deprecated (Lucene
10.4 computes it automatically)
+
## 9.5.0 (2026-08-04)
API
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/elasticsearch-py-9.5.0/elasticsearch/_async/client/esql.py
new/elasticsearch-py-9.5.1/elasticsearch/_async/client/esql.py
--- old/elasticsearch-py-9.5.0/elasticsearch/_async/client/esql.py
2026-08-04 03:45:57.000000000 +0200
+++ new/elasticsearch-py-9.5.1/elasticsearch/_async/client/esql.py
2026-08-31 21:30:18.000000000 +0200
@@ -447,6 +447,115 @@
@_rewrite_parameters()
@_availability_warning(Stability.EXPERIMENTAL)
+ async def delete_data_source(
+ self,
+ *,
+ name: t.Union[str, t.Sequence[str]],
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Delete ES|QL data sources.</p>
+ <p>Deletes one or more data sources used in ES|QL data federation.
+ Fails with <code>409</code> if any dataset references one of the
named data sources;
+ delete the dependent datasets first.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-delete-data-source>`_
+
+ :param name: A comma-separated list of data source names to delete.
+ :param master_timeout: Period to wait for a connection to the master
node.
+ :param timeout: The time to wait for the request to be completed.
+ """
+ if name in SKIP_IN_PATH:
+ raise ValueError("Empty value passed for parameter 'name'")
+ __path_parts: t.Dict[str, str] = {"name": _quote(name)}
+ __path = f'/_query/data_source/{__path_parts["name"]}'
+ __query: t.Dict[str, t.Any] = {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ if timeout is not None:
+ __query["timeout"] = timeout
+ __headers = {"accept": "application/json"}
+ return await self.perform_request( # type: ignore[return-value]
+ "DELETE",
+ __path,
+ params=__query,
+ headers=__headers,
+ endpoint_id="esql.delete_data_source",
+ path_parts=__path_parts,
+ )
+
+ @_rewrite_parameters()
+ @_availability_warning(Stability.EXPERIMENTAL)
+ async def delete_dataset(
+ self,
+ *,
+ name: t.Union[str, t.Sequence[str]],
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Delete ES|QL datasets.</p>
+ <p>Deletes one or more datasets used in ES|QL data federation.
+ If any specified dataset does not exist, the request fails and no
datasets are deleted.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-delete-dataset>`_
+
+ :param name: A comma-separated list of dataset names to delete.
+ :param master_timeout: Period to wait for a connection to the master
node.
+ :param timeout: The time to wait for the request to be completed.
+ """
+ if name in SKIP_IN_PATH:
+ raise ValueError("Empty value passed for parameter 'name'")
+ __path_parts: t.Dict[str, str] = {"name": _quote(name)}
+ __path = f'/_query/dataset/{__path_parts["name"]}'
+ __query: t.Dict[str, t.Any] = {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ if timeout is not None:
+ __query["timeout"] = timeout
+ __headers = {"accept": "application/json"}
+ return await self.perform_request( # type: ignore[return-value]
+ "DELETE",
+ __path,
+ params=__query,
+ headers=__headers,
+ endpoint_id="esql.delete_dataset",
+ path_parts=__path_parts,
+ )
+
+ @_rewrite_parameters()
+ @_availability_warning(Stability.EXPERIMENTAL)
async def delete_view(
self,
*,
@@ -492,6 +601,116 @@
@_rewrite_parameters()
@_availability_warning(Stability.EXPERIMENTAL)
+ async def get_data_source(
+ self,
+ *,
+ name: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Get ES|QL data sources.</p>
+ <p>Returns one or more data sources used in ES|QL data federation.
+ A concrete-name miss returns <code>404</code>; a wildcard pattern or
list-all request with no match
+ returns <code>200</code> with an empty array.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-get-data-source>`_
+
+ :param name: A comma-separated list of data source names or wildcard
patterns.
+ Omit to return all data sources.
+ :param master_timeout: Period to wait for a connection to the master
node.
+ """
+ __path_parts: t.Dict[str, str]
+ if name not in SKIP_IN_PATH:
+ __path_parts = {"name": _quote(name)}
+ __path = f'/_query/data_source/{__path_parts["name"]}'
+ else:
+ __path_parts = {}
+ __path = "/_query/data_source"
+ __query: t.Dict[str, t.Any] = {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ __headers = {"accept": "application/json"}
+ return await self.perform_request( # type: ignore[return-value]
+ "GET",
+ __path,
+ params=__query,
+ headers=__headers,
+ endpoint_id="esql.get_data_source",
+ path_parts=__path_parts,
+ )
+
+ @_rewrite_parameters()
+ @_availability_warning(Stability.EXPERIMENTAL)
+ async def get_dataset(
+ self,
+ *,
+ name: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Get ES|QL datasets.</p>
+ <p>Returns one or more datasets used in ES|QL data federation.
+ A concrete-name miss returns <code>404</code>; a wildcard pattern or
list-all request with no match
+ returns <code>200</code> with an empty array.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-get-dataset>`_
+
+ :param name: A comma-separated list of dataset names or wildcard
patterns. Omit
+ to return all datasets.
+ :param master_timeout: Period to wait for a connection to the master
node.
+ """
+ __path_parts: t.Dict[str, str]
+ if name not in SKIP_IN_PATH:
+ __path_parts = {"name": _quote(name)}
+ __path = f'/_query/dataset/{__path_parts["name"]}'
+ else:
+ __path_parts = {}
+ __path = "/_query/dataset"
+ __query: t.Dict[str, t.Any] = {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ __headers = {"accept": "application/json"}
+ return await self.perform_request( # type: ignore[return-value]
+ "GET",
+ __path,
+ params=__query,
+ headers=__headers,
+ endpoint_id="esql.get_dataset",
+ path_parts=__path_parts,
+ )
+
+ @_rewrite_parameters()
+ @_availability_warning(Stability.EXPERIMENTAL)
async def get_query(
self,
*,
@@ -623,6 +842,177 @@
path_parts=__path_parts,
)
+ @_rewrite_parameters(
+ body_fields=("type", "description", "settings"),
+ )
+ @_availability_warning(Stability.EXPERIMENTAL)
+ async def put_data_source(
+ self,
+ *,
+ name: str,
+ type: t.Optional[str] = None,
+ description: t.Optional[str] = None,
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ settings: t.Optional[t.Mapping[str, t.Any]] = None,
+ timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]] = None,
+ body: t.Optional[t.Dict[str, t.Any]] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Create or update an ES|QL data source.</p>
+ <p>Creates or replaces a named, type-specific data source
configuration for ES|QL data federation.
+ Datasets reference data source configurations to access external
data. Names must be lowercase
+ and follow index or alias naming rules.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-put-data-source>`_
+
+ :param name: The data source name to create or update.
+ :param type: The data source type. Currently, `s3` is supported. The
value must
+ be lowercase and contain no whitespace.
+ :param description: A free-text description of the data source.
+ :param master_timeout: Period to wait for a connection to the master
node.
+ :param settings: Type-specific connection and authentication settings.
For `s3`,
+ connection settings include `region` and `endpoint`.
Authentication settings
+ include `auth` and the credentials required by the selected
authentication
+ method.
+ :param timeout: The time to wait for the request to be completed.
+ """
+ if name in SKIP_IN_PATH:
+ raise ValueError("Empty value passed for parameter 'name'")
+ if type is None and body is None:
+ raise ValueError("Empty value passed for parameter 'type'")
+ __path_parts: t.Dict[str, str] = {"name": _quote(name)}
+ __path = f'/_query/data_source/{__path_parts["name"]}'
+ __query: t.Dict[str, t.Any] = {}
+ __body: t.Dict[str, t.Any] = body if body is not None else {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ if timeout is not None:
+ __query["timeout"] = timeout
+ if not __body:
+ if type is not None:
+ __body["type"] = type
+ if description is not None:
+ __body["description"] = description
+ if settings is not None:
+ __body["settings"] = settings
+ __headers = {"accept": "application/json", "content-type":
"application/json"}
+ return await self.perform_request( # type: ignore[return-value]
+ "PUT",
+ __path,
+ params=__query,
+ headers=__headers,
+ body=__body,
+ endpoint_id="esql.put_data_source",
+ path_parts=__path_parts,
+ )
+
+ @_rewrite_parameters(
+ body_fields=("data_source", "resource", "description", "mappings",
"settings"),
+ )
+ @_availability_warning(Stability.EXPERIMENTAL)
+ async def put_dataset(
+ self,
+ *,
+ name: str,
+ data_source: t.Optional[str] = None,
+ resource: t.Optional[str] = None,
+ description: t.Optional[str] = None,
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ mappings: t.Optional[t.Mapping[str, t.Any]] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ settings: t.Optional[t.Mapping[str, t.Any]] = None,
+ timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]] = None,
+ body: t.Optional[t.Dict[str, t.Any]] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Create or update an ES|QL dataset.</p>
+ <p>Creates or replaces a dataset that references a data source in
ES|QL data federation.
+ Dataset names participate in the index namespace and must follow
index or alias naming rules.
+ Returns <code>404</code> if the referenced data source does not
exist.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-put-dataset>`_
+
+ :param name: The dataset name to create or update.
+ :param data_source: The name of the referenced data source. The data
source must
+ already exist.
+ :param resource: The URI that identifies the data to read, resolved
against the
+ referenced data source. It can include glob patterns. For example,
a recursive
+ pattern can match all Parquet files under the
`s3://logs-bucket/access` prefix.
+ :param description: A free-text description of the dataset.
+ :param mappings: User-declared mapping on the dataset definition
+ :param master_timeout: Period to wait for a connection to the master
node.
+ :param settings: Format and parsing-specific settings that configure
how the
+ resource is read. Common keys include `format`, which explicitly
selects
+ a registered format, and `partition_detection`, which accepts
`auto`, `hive`,
+ `template`, or `none`. Additional keys depend on the format
reader. Compression
+ can be inferred from the resource URI.
+ :param timeout: The time to wait for the request to be completed.
+ """
+ if name in SKIP_IN_PATH:
+ raise ValueError("Empty value passed for parameter 'name'")
+ if data_source is None and body is None:
+ raise ValueError("Empty value passed for parameter 'data_source'")
+ if resource is None and body is None:
+ raise ValueError("Empty value passed for parameter 'resource'")
+ __path_parts: t.Dict[str, str] = {"name": _quote(name)}
+ __path = f'/_query/dataset/{__path_parts["name"]}'
+ __query: t.Dict[str, t.Any] = {}
+ __body: t.Dict[str, t.Any] = body if body is not None else {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ if timeout is not None:
+ __query["timeout"] = timeout
+ if not __body:
+ if data_source is not None:
+ __body["data_source"] = data_source
+ if resource is not None:
+ __body["resource"] = resource
+ if description is not None:
+ __body["description"] = description
+ if mappings is not None:
+ __body["mappings"] = mappings
+ if settings is not None:
+ __body["settings"] = settings
+ __headers = {"accept": "application/json", "content-type":
"application/json"}
+ return await self.perform_request( # type: ignore[return-value]
+ "PUT",
+ __path,
+ params=__query,
+ headers=__headers,
+ body=__body,
+ endpoint_id="esql.put_dataset",
+ path_parts=__path_parts,
+ )
+
@_rewrite_parameters(
body_fields=("query",),
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/elasticsearch-py-9.5.0/elasticsearch/_sync/client/esql.py
new/elasticsearch-py-9.5.1/elasticsearch/_sync/client/esql.py
--- old/elasticsearch-py-9.5.0/elasticsearch/_sync/client/esql.py
2026-08-04 03:45:57.000000000 +0200
+++ new/elasticsearch-py-9.5.1/elasticsearch/_sync/client/esql.py
2026-08-31 21:30:18.000000000 +0200
@@ -447,6 +447,115 @@
@_rewrite_parameters()
@_availability_warning(Stability.EXPERIMENTAL)
+ def delete_data_source(
+ self,
+ *,
+ name: t.Union[str, t.Sequence[str]],
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Delete ES|QL data sources.</p>
+ <p>Deletes one or more data sources used in ES|QL data federation.
+ Fails with <code>409</code> if any dataset references one of the
named data sources;
+ delete the dependent datasets first.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-delete-data-source>`_
+
+ :param name: A comma-separated list of data source names to delete.
+ :param master_timeout: Period to wait for a connection to the master
node.
+ :param timeout: The time to wait for the request to be completed.
+ """
+ if name in SKIP_IN_PATH:
+ raise ValueError("Empty value passed for parameter 'name'")
+ __path_parts: t.Dict[str, str] = {"name": _quote(name)}
+ __path = f'/_query/data_source/{__path_parts["name"]}'
+ __query: t.Dict[str, t.Any] = {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ if timeout is not None:
+ __query["timeout"] = timeout
+ __headers = {"accept": "application/json"}
+ return self.perform_request( # type: ignore[return-value]
+ "DELETE",
+ __path,
+ params=__query,
+ headers=__headers,
+ endpoint_id="esql.delete_data_source",
+ path_parts=__path_parts,
+ )
+
+ @_rewrite_parameters()
+ @_availability_warning(Stability.EXPERIMENTAL)
+ def delete_dataset(
+ self,
+ *,
+ name: t.Union[str, t.Sequence[str]],
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Delete ES|QL datasets.</p>
+ <p>Deletes one or more datasets used in ES|QL data federation.
+ If any specified dataset does not exist, the request fails and no
datasets are deleted.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-delete-dataset>`_
+
+ :param name: A comma-separated list of dataset names to delete.
+ :param master_timeout: Period to wait for a connection to the master
node.
+ :param timeout: The time to wait for the request to be completed.
+ """
+ if name in SKIP_IN_PATH:
+ raise ValueError("Empty value passed for parameter 'name'")
+ __path_parts: t.Dict[str, str] = {"name": _quote(name)}
+ __path = f'/_query/dataset/{__path_parts["name"]}'
+ __query: t.Dict[str, t.Any] = {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ if timeout is not None:
+ __query["timeout"] = timeout
+ __headers = {"accept": "application/json"}
+ return self.perform_request( # type: ignore[return-value]
+ "DELETE",
+ __path,
+ params=__query,
+ headers=__headers,
+ endpoint_id="esql.delete_dataset",
+ path_parts=__path_parts,
+ )
+
+ @_rewrite_parameters()
+ @_availability_warning(Stability.EXPERIMENTAL)
def delete_view(
self,
*,
@@ -492,6 +601,116 @@
@_rewrite_parameters()
@_availability_warning(Stability.EXPERIMENTAL)
+ def get_data_source(
+ self,
+ *,
+ name: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Get ES|QL data sources.</p>
+ <p>Returns one or more data sources used in ES|QL data federation.
+ A concrete-name miss returns <code>404</code>; a wildcard pattern or
list-all request with no match
+ returns <code>200</code> with an empty array.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-get-data-source>`_
+
+ :param name: A comma-separated list of data source names or wildcard
patterns.
+ Omit to return all data sources.
+ :param master_timeout: Period to wait for a connection to the master
node.
+ """
+ __path_parts: t.Dict[str, str]
+ if name not in SKIP_IN_PATH:
+ __path_parts = {"name": _quote(name)}
+ __path = f'/_query/data_source/{__path_parts["name"]}'
+ else:
+ __path_parts = {}
+ __path = "/_query/data_source"
+ __query: t.Dict[str, t.Any] = {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ __headers = {"accept": "application/json"}
+ return self.perform_request( # type: ignore[return-value]
+ "GET",
+ __path,
+ params=__query,
+ headers=__headers,
+ endpoint_id="esql.get_data_source",
+ path_parts=__path_parts,
+ )
+
+ @_rewrite_parameters()
+ @_availability_warning(Stability.EXPERIMENTAL)
+ def get_dataset(
+ self,
+ *,
+ name: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Get ES|QL datasets.</p>
+ <p>Returns one or more datasets used in ES|QL data federation.
+ A concrete-name miss returns <code>404</code>; a wildcard pattern or
list-all request with no match
+ returns <code>200</code> with an empty array.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-get-dataset>`_
+
+ :param name: A comma-separated list of dataset names or wildcard
patterns. Omit
+ to return all datasets.
+ :param master_timeout: Period to wait for a connection to the master
node.
+ """
+ __path_parts: t.Dict[str, str]
+ if name not in SKIP_IN_PATH:
+ __path_parts = {"name": _quote(name)}
+ __path = f'/_query/dataset/{__path_parts["name"]}'
+ else:
+ __path_parts = {}
+ __path = "/_query/dataset"
+ __query: t.Dict[str, t.Any] = {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ __headers = {"accept": "application/json"}
+ return self.perform_request( # type: ignore[return-value]
+ "GET",
+ __path,
+ params=__query,
+ headers=__headers,
+ endpoint_id="esql.get_dataset",
+ path_parts=__path_parts,
+ )
+
+ @_rewrite_parameters()
+ @_availability_warning(Stability.EXPERIMENTAL)
def get_query(
self,
*,
@@ -623,6 +842,177 @@
path_parts=__path_parts,
)
+ @_rewrite_parameters(
+ body_fields=("type", "description", "settings"),
+ )
+ @_availability_warning(Stability.EXPERIMENTAL)
+ def put_data_source(
+ self,
+ *,
+ name: str,
+ type: t.Optional[str] = None,
+ description: t.Optional[str] = None,
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ settings: t.Optional[t.Mapping[str, t.Any]] = None,
+ timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]] = None,
+ body: t.Optional[t.Dict[str, t.Any]] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Create or update an ES|QL data source.</p>
+ <p>Creates or replaces a named, type-specific data source
configuration for ES|QL data federation.
+ Datasets reference data source configurations to access external
data. Names must be lowercase
+ and follow index or alias naming rules.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-put-data-source>`_
+
+ :param name: The data source name to create or update.
+ :param type: The data source type. Currently, `s3` is supported. The
value must
+ be lowercase and contain no whitespace.
+ :param description: A free-text description of the data source.
+ :param master_timeout: Period to wait for a connection to the master
node.
+ :param settings: Type-specific connection and authentication settings.
For `s3`,
+ connection settings include `region` and `endpoint`.
Authentication settings
+ include `auth` and the credentials required by the selected
authentication
+ method.
+ :param timeout: The time to wait for the request to be completed.
+ """
+ if name in SKIP_IN_PATH:
+ raise ValueError("Empty value passed for parameter 'name'")
+ if type is None and body is None:
+ raise ValueError("Empty value passed for parameter 'type'")
+ __path_parts: t.Dict[str, str] = {"name": _quote(name)}
+ __path = f'/_query/data_source/{__path_parts["name"]}'
+ __query: t.Dict[str, t.Any] = {}
+ __body: t.Dict[str, t.Any] = body if body is not None else {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ if timeout is not None:
+ __query["timeout"] = timeout
+ if not __body:
+ if type is not None:
+ __body["type"] = type
+ if description is not None:
+ __body["description"] = description
+ if settings is not None:
+ __body["settings"] = settings
+ __headers = {"accept": "application/json", "content-type":
"application/json"}
+ return self.perform_request( # type: ignore[return-value]
+ "PUT",
+ __path,
+ params=__query,
+ headers=__headers,
+ body=__body,
+ endpoint_id="esql.put_data_source",
+ path_parts=__path_parts,
+ )
+
+ @_rewrite_parameters(
+ body_fields=("data_source", "resource", "description", "mappings",
"settings"),
+ )
+ @_availability_warning(Stability.EXPERIMENTAL)
+ def put_dataset(
+ self,
+ *,
+ name: str,
+ data_source: t.Optional[str] = None,
+ resource: t.Optional[str] = None,
+ description: t.Optional[str] = None,
+ error_trace: t.Optional[bool] = None,
+ filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
+ human: t.Optional[bool] = None,
+ mappings: t.Optional[t.Mapping[str, t.Any]] = None,
+ master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]]
= None,
+ pretty: t.Optional[bool] = None,
+ settings: t.Optional[t.Mapping[str, t.Any]] = None,
+ timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]] = None,
+ body: t.Optional[t.Dict[str, t.Any]] = None,
+ ) -> ObjectApiResponse[t.Any]:
+ """
+ .. raw:: html
+
+ <p>Create or update an ES|QL dataset.</p>
+ <p>Creates or replaces a dataset that references a data source in
ES|QL data federation.
+ Dataset names participate in the index namespace and must follow
index or alias naming rules.
+ Returns <code>404</code> if the referenced data source does not
exist.</p>
+
+
+
`<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-esql-put-dataset>`_
+
+ :param name: The dataset name to create or update.
+ :param data_source: The name of the referenced data source. The data
source must
+ already exist.
+ :param resource: The URI that identifies the data to read, resolved
against the
+ referenced data source. It can include glob patterns. For example,
a recursive
+ pattern can match all Parquet files under the
`s3://logs-bucket/access` prefix.
+ :param description: A free-text description of the dataset.
+ :param mappings: User-declared mapping on the dataset definition
+ :param master_timeout: Period to wait for a connection to the master
node.
+ :param settings: Format and parsing-specific settings that configure
how the
+ resource is read. Common keys include `format`, which explicitly
selects
+ a registered format, and `partition_detection`, which accepts
`auto`, `hive`,
+ `template`, or `none`. Additional keys depend on the format
reader. Compression
+ can be inferred from the resource URI.
+ :param timeout: The time to wait for the request to be completed.
+ """
+ if name in SKIP_IN_PATH:
+ raise ValueError("Empty value passed for parameter 'name'")
+ if data_source is None and body is None:
+ raise ValueError("Empty value passed for parameter 'data_source'")
+ if resource is None and body is None:
+ raise ValueError("Empty value passed for parameter 'resource'")
+ __path_parts: t.Dict[str, str] = {"name": _quote(name)}
+ __path = f'/_query/dataset/{__path_parts["name"]}'
+ __query: t.Dict[str, t.Any] = {}
+ __body: t.Dict[str, t.Any] = body if body is not None else {}
+ if error_trace is not None:
+ __query["error_trace"] = error_trace
+ if filter_path is not None:
+ __query["filter_path"] = filter_path
+ if human is not None:
+ __query["human"] = human
+ if master_timeout is not None:
+ __query["master_timeout"] = master_timeout
+ if pretty is not None:
+ __query["pretty"] = pretty
+ if timeout is not None:
+ __query["timeout"] = timeout
+ if not __body:
+ if data_source is not None:
+ __body["data_source"] = data_source
+ if resource is not None:
+ __body["resource"] = resource
+ if description is not None:
+ __body["description"] = description
+ if mappings is not None:
+ __body["mappings"] = mappings
+ if settings is not None:
+ __body["settings"] = settings
+ __headers = {"accept": "application/json", "content-type":
"application/json"}
+ return self.perform_request( # type: ignore[return-value]
+ "PUT",
+ __path,
+ params=__query,
+ headers=__headers,
+ body=__body,
+ endpoint_id="esql.put_dataset",
+ path_parts=__path_parts,
+ )
+
@_rewrite_parameters(
body_fields=("query",),
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/elasticsearch-py-9.5.0/elasticsearch/_version.py
new/elasticsearch-py-9.5.1/elasticsearch/_version.py
--- old/elasticsearch-py-9.5.0/elasticsearch/_version.py 2026-08-04
03:45:57.000000000 +0200
+++ new/elasticsearch-py-9.5.1/elasticsearch/_version.py 2026-08-31
21:30:18.000000000 +0200
@@ -15,6 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-__versionstr__ = "9.5.0"
-__es_specification_commit__ = "7555fc9af2cc5f3cedab2f35548136eb4972f1fa"
+__versionstr__ = "9.5.1"
+__es_specification_commit__ = "d669cedaf2a20400a96d6c786ff6296d0630e7b2"
_SERVERLESS_API_VERSION = "2023-10-31"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/elasticsearch-py-9.5.0/elasticsearch/dsl/field.py
new/elasticsearch-py-9.5.1/elasticsearch/dsl/field.py
--- old/elasticsearch-py-9.5.0/elasticsearch/dsl/field.py 2026-08-04
03:45:57.000000000 +0200
+++ new/elasticsearch-py-9.5.1/elasticsearch/dsl/field.py 2026-08-31
21:30:18.000000000 +0200
@@ -4009,8 +4009,13 @@
embeddings for the field. This parameter cannot be updated. Use
the Create inference API to create the endpoint. If
`search_inference_id` is specified, the inference endpoint will
- only be used at index time. Defaults to `.elser-2-elasticsearch`
- if omitted.
+ only be used at index time. If the `inference_id` is not
+ specified, it will default to `.jina-embeddings-v5-text-small` if
+ the cluster is authorized to use the Elastic Inference Service,
+ otherwise it will default to `.elser-2-elasticsearch`. The
+ `.elser-2-elasticsearch` inference endpoint relies on a local ML
+ node to run the ELSER model. Defaults to `.jina-
+ embeddings-v5-text-small` if omitted.
:arg search_inference_id: Inference endpoint that will be used to
generate embeddings at query time. You can update this parameter
by using the Update mapping API. Use the Create inference API to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/elasticsearch-py-9.5.0/elasticsearch/dsl/types.py
new/elasticsearch-py-9.5.1/elasticsearch/dsl/types.py
--- old/elasticsearch-py-9.5.0/elasticsearch/dsl/types.py 2026-08-04
03:45:57.000000000 +0200
+++ new/elasticsearch-py-9.5.1/elasticsearch/dsl/types.py 2026-08-31
21:30:18.000000000 +0200
@@ -408,8 +408,32 @@
flat search. `-1` (default) defers to format defaults: `300` for
`bbq_hnsw`, `150` for `hnsw`, `int8_hnsw`, and `int4_hnsw`. `0`
always builds the graph. A positive value overrides the format
- default. Only applicable to `hnsw`, `int8_hnsw`, `int4_hnsw`, and
- `bbq_hnsw` index types. Defaults to `-1` if omitted.
+ default. Only applicable to `hnsw`, `int8_hnsw`, `int4_hnsw`,
+ `bbq_hnsw`, and `bbq_disk` index types. Defaults to `-1` if
+ omitted.
+ :arg cluster_size: Only applicable to `bbq_disk`. The number of
+ vectors per cluster. Must be between 64 and 65536. Defaults to
+ `384` if omitted.
+ :arg default_visit_percentage: Only applicable to `bbq_disk`. The
+ percentage of clusters to visit during search. Must be between 0
+ and 100. A value of 0 defaults to using `num_candidates` for
+ calculating the visit percentage.
+ :arg bits: Only applicable to `bbq_disk`. The number of bits per
+ dimension for quantization encoding. Valid values are `1`, `2`,
+ `4`, or `7`. When no `rescore_vector` is explicitly set, the
+ default oversampling is automatically adjusted based on the bits
+ value. This setting can be changed without reindexing. Defaults to
+ `1` if omitted.
+ :arg precondition: Only applicable to `bbq_disk`. When `true`,
+ transforms indexed vectors using a random orthogonal projection
+ before quantization, which can improve accuracy when vector
+ components are not normally distributed. Cannot be changed after
+ the field is created.
+ :arg auto_calibrate: Only applicable to `bbq_disk`. When `true`,
+ Elasticsearch automatically selects the optimal quantization
+ encoding, oversampling factor, and preconditioning for each merged
+ segment based on estimated recall characteristics. Cannot be
+ changed after the field is created.
"""
type: Union[
@@ -434,6 +458,11 @@
]
on_disk_rescore: Union[bool, DefaultType]
flat_index_threshold: Union[int, DefaultType]
+ cluster_size: Union[int, DefaultType]
+ default_visit_percentage: Union[float, DefaultType]
+ bits: Union[int, DefaultType]
+ precondition: Union[bool, DefaultType]
+ auto_calibrate: Union[bool, DefaultType]
def __init__(
self,
@@ -460,6 +489,11 @@
] = DEFAULT,
on_disk_rescore: Union[bool, DefaultType] = DEFAULT,
flat_index_threshold: Union[int, DefaultType] = DEFAULT,
+ cluster_size: Union[int, DefaultType] = DEFAULT,
+ default_visit_percentage: Union[float, DefaultType] = DEFAULT,
+ bits: Union[int, DefaultType] = DEFAULT,
+ precondition: Union[bool, DefaultType] = DEFAULT,
+ auto_calibrate: Union[bool, DefaultType] = DEFAULT,
**kwargs: Any,
):
if type is not DEFAULT:
@@ -476,6 +510,16 @@
kwargs["on_disk_rescore"] = on_disk_rescore
if flat_index_threshold is not DEFAULT:
kwargs["flat_index_threshold"] = flat_index_threshold
+ if cluster_size is not DEFAULT:
+ kwargs["cluster_size"] = cluster_size
+ if default_visit_percentage is not DEFAULT:
+ kwargs["default_visit_percentage"] = default_visit_percentage
+ if bits is not DEFAULT:
+ kwargs["bits"] = bits
+ if precondition is not DEFAULT:
+ kwargs["precondition"] = precondition
+ if auto_calibrate is not DEFAULT:
+ kwargs["auto_calibrate"] = auto_calibrate
super().__init__(kwargs)