From 82ef2db5fada78853e72e797f150a6f67dabcd4bd102005eca4f39f203474a44 Mon Sep 17 00:00:00 2001 From: Daniel Garcia Date: Wed, 8 Jan 2025 08:59:52 +0000 Subject: [PATCH] - Add patch to do not depend on pyarrow for tests: 0001-Make-pyarrow-dependency-optional-for-tests.patch - Update to 8.17.0: * Allow simsimd again on Python 3.13 (#2722) * Update APIs: - Mark all Inference APIs as stable. - Add allow_partial_search_results to the Open Point in Time API - Add keep_alive to the Get async search status API - Remove the keep_alive, pre_filter_shard_size and scroll parameters from the Submit async search API. They were never supported. - Add master_timeout and timeout to all autoscaling policy APIs - Add master_timeout to the Alias exists and Get alias APIs - Add list_executed_pipelines and require_data_stream to Bulk API - Add include_model_definition to Get trained models API - Add meta to Create data frame analytics API - Add aggs to Create datafeeds API - Add allow_no_indices, expand_wildcards, ignore_throttled and ignore_unavailable to Create anomaly detection jobs API - 8.16.0: * Support Python 3.13 (#2680) * Emit Python warnings for beta and tech preview APIs (#2675). * Vectorstore: use a retriever query for hybrid search (#2666) * Allow retries for statuses other than 429 in streaming bulk (#2071, contributed by @ayayron) * Make BulkIndexError and ScanError serializable (#2669, contributed by @seagrine) * Fix import when trace is missing from opentelemetry package (#2694, contributed by @nicoloboschi) * Update APIs: - Fix nodes parameter in Task management API (contributed by @margaretpearce) - Add Test query rule API - Add Create Cross-Cluster API key and Update Cross-Cluster API key APIs - Add experimental Verify snapshot repository API - Add data_stream_name and settings to Delete auto-follow pattern API - Add max_samples_per_key to Get async EQL status API - Add lifecycle and remove unused data_retention and downsampling parameters from Put data stream lifecycle API OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-elasticsearch?expand=0&rev=50 --- ...yarrow-dependency-optional-for-tests.patch | 193 ++++++++++++++++++ python-elasticsearch.changes | 82 ++++++++ python-elasticsearch.spec | 10 +- v8.12.0.tar.gz | 3 - v8.17.0.tar.gz | 3 + 5 files changed, 285 insertions(+), 6 deletions(-) create mode 100644 0001-Make-pyarrow-dependency-optional-for-tests.patch delete mode 100644 v8.12.0.tar.gz create mode 100644 v8.17.0.tar.gz diff --git a/0001-Make-pyarrow-dependency-optional-for-tests.patch b/0001-Make-pyarrow-dependency-optional-for-tests.patch new file mode 100644 index 0000000..256b4f5 --- /dev/null +++ b/0001-Make-pyarrow-dependency-optional-for-tests.patch @@ -0,0 +1,193 @@ +From 740005db4dcd732015606d86eff29eb15a0193b2 Mon Sep 17 00:00:00 2001 +From: Daniel Garcia Moreno +Date: Wed, 8 Jan 2025 08:50:23 +0100 +Subject: [PATCH] Make pyarrow dependency optional for tests + +--- + .../test_client/test_deprecated_options.py | 40 ++++++++------- + .../test_client/test_serializers.py | 49 ++++++++----------- + test_elasticsearch/test_serializer.py | 9 +++- + 3 files changed, 48 insertions(+), 50 deletions(-) + +diff --git a/test_elasticsearch/test_client/test_deprecated_options.py b/test_elasticsearch/test_client/test_deprecated_options.py +index 810e75cf..ea797ce8 100644 +--- a/test_elasticsearch/test_client/test_deprecated_options.py ++++ b/test_elasticsearch/test_client/test_deprecated_options.py +@@ -22,6 +22,24 @@ import pytest + from elasticsearch import Elasticsearch, JsonSerializer + + ++EXPECTED_SERIALIZERS = { ++ "application/vnd.mapbox-vector-tile", ++ "application/x-ndjson", ++ "application/json", ++ "text/*", ++ "application/vnd.elasticsearch+json", ++ "application/vnd.elasticsearch+x-ndjson", ++} ++ ++ ++try: ++ import pyarrow as pa ++ EXPECTED_SERIALIZERS.add("application/vnd.apache.arrow.stream") ++except ImportError: ++ pa = None ++ ++ ++ + def test_sniff_on_connection_fail(): + with warnings.catch_warnings(record=True) as w: + client = Elasticsearch("http://localhost:9200", sniff_on_connection_fail=True) +@@ -129,15 +147,7 @@ def test_serializer_and_serializers(): + client.transport.serializers.get_serializer("application/json"), + CustomSerializer, + ) +- assert set(client.transport.serializers.serializers.keys()) == { +- "application/vnd.mapbox-vector-tile", +- "application/x-ndjson", +- "application/json", +- "text/*", +- "application/vnd.apache.arrow.stream", +- "application/vnd.elasticsearch+json", +- "application/vnd.elasticsearch+x-ndjson", +- } ++ assert set(client.transport.serializers.serializers.keys()) == EXPECTED_SERIALIZERS + + client = Elasticsearch( + "http://localhost:9200", +@@ -150,13 +160,5 @@ def test_serializer_and_serializers(): + client.transport.serializers.get_serializer("application/json"), + CustomSerializer, + ) +- assert set(client.transport.serializers.serializers.keys()) == { +- "application/vnd.mapbox-vector-tile", +- "application/x-ndjson", +- "application/json", +- "text/*", +- "application/vnd.apache.arrow.stream", +- "application/vnd.elasticsearch+json", +- "application/vnd.elasticsearch+x-ndjson", +- "application/cbor", +- } ++ expected = EXPECTED_SERIALIZERS | {"application/cbor"} ++ assert set(client.transport.serializers.serializers.keys()) == expected +diff --git a/test_elasticsearch/test_client/test_serializers.py b/test_elasticsearch/test_client/test_serializers.py +index 9d13386e..4b18212d 100644 +--- a/test_elasticsearch/test_client/test_serializers.py ++++ b/test_elasticsearch/test_client/test_serializers.py +@@ -21,6 +21,23 @@ from elasticsearch import Elasticsearch + from test_elasticsearch.test_cases import DummyTransportTestCase + + ++EXPECTED_SERIALIZERS = { ++ "application/json", ++ "text/*", ++ "application/x-ndjson", ++ "application/vnd.mapbox-vector-tile", ++ "application/vnd.elasticsearch+json", ++ "application/vnd.elasticsearch+x-ndjson", ++} ++ ++ ++try: ++ import pyarrow as pa ++ EXPECTED_SERIALIZERS.add("application/vnd.apache.arrow.stream") ++except ImportError: ++ pa = None ++ ++ + class TestSerializers(DummyTransportTestCase): + def test_compat_mode_on_by_default(self): + calls = self.client.transport.calls +@@ -90,16 +107,8 @@ class TestSerializers(DummyTransportTestCase): + "https://localhost:9200", serializers={f"application/{mime_subtype}": ser} + ) + serializers = client.transport.serializers.serializers +- assert set(serializers.keys()) == { +- "application/json", +- "text/*", +- "application/x-ndjson", +- "application/vnd.apache.arrow.stream", +- "application/vnd.mapbox-vector-tile", +- "application/vnd.elasticsearch+json", +- "application/vnd.elasticsearch+x-ndjson", +- } + ++ assert set(serializers.keys()) == EXPECTED_SERIALIZERS + assert serializers[f"application/{mime_subtype}"] is ser + assert serializers[f"application/vnd.elasticsearch+{mime_subtype}"] is ser + +@@ -118,16 +127,7 @@ class TestSerializers(DummyTransportTestCase): + }, + ) + serializers = client.transport.serializers.serializers +- assert set(serializers.keys()) == { +- "application/json", +- "text/*", +- "application/x-ndjson", +- "application/vnd.apache.arrow.stream", +- "application/vnd.mapbox-vector-tile", +- "application/vnd.elasticsearch+json", +- "application/vnd.elasticsearch+x-ndjson", +- } +- ++ assert set(serializers.keys()) == EXPECTED_SERIALIZERS + assert serializers[f"application/{mime_subtype}"] is ser1 + assert serializers[f"application/vnd.elasticsearch+{mime_subtype}"] is ser2 + +@@ -138,15 +138,6 @@ class TestSerializers(DummyTransportTestCase): + ser = CustomSerializer() + client = Elasticsearch("https://localhost:9200", serializer=ser) + serializers = client.transport.serializers.serializers +- assert set(serializers.keys()) == { +- "application/json", +- "text/*", +- "application/x-ndjson", +- "application/vnd.apache.arrow.stream", +- "application/vnd.mapbox-vector-tile", +- "application/vnd.elasticsearch+json", +- "application/vnd.elasticsearch+x-ndjson", +- } +- ++ assert set(serializers.keys()) == EXPECTED_SERIALIZERS + assert serializers["application/json"] is ser + assert serializers["application/vnd.elasticsearch+json"] is ser +diff --git a/test_elasticsearch/test_serializer.py b/test_elasticsearch/test_serializer.py +index 02723e8f..313029ba 100644 +--- a/test_elasticsearch/test_serializer.py ++++ b/test_elasticsearch/test_serializer.py +@@ -19,9 +19,14 @@ import uuid + from datetime import datetime + from decimal import Decimal + +-import pyarrow as pa + import pytest + ++try: ++ import pyarrow as pa ++ from elasticsearch.serializer import PyArrowSerializer ++except ImportError: ++ pa = None ++ + try: + import numpy as np + import pandas as pd +@@ -35,7 +40,6 @@ from elasticsearch.exceptions import SerializationError + from elasticsearch.serializer import ( + JSONSerializer, + OrjsonSerializer, +- PyArrowSerializer, + TextSerializer, + ) + +@@ -163,6 +167,7 @@ def test_serializes_pandas_category(json_serializer): + assert b'{"d":[1,2,3]}' == json_serializer.dumps({"d": cat}) + + ++@pytest.mark.skipif(pa is None, reason="Test requires pyarrow to be available") + def test_pyarrow_loads(): + data = [ + pa.array([1, 2, 3, 4]), +-- +2.47.0 + diff --git a/python-elasticsearch.changes b/python-elasticsearch.changes index 0a86586..15cac04 100644 --- a/python-elasticsearch.changes +++ b/python-elasticsearch.changes @@ -1,3 +1,85 @@ +------------------------------------------------------------------- +Wed Jan 8 08:59:00 UTC 2025 - Daniel Garcia + +- Add patch to do not depend on pyarrow for tests: 0001-Make-pyarrow-dependency-optional-for-tests.patch +- Update to 8.17.0: + * Allow simsimd again on Python 3.13 (#2722) + * Update APIs: + - Mark all Inference APIs as stable. + - Add allow_partial_search_results to the Open Point in Time API + - Add keep_alive to the Get async search status API + - Remove the keep_alive, pre_filter_shard_size and scroll parameters from the Submit async search API. They were never supported. + - Add master_timeout and timeout to all autoscaling policy APIs + - Add master_timeout to the Alias exists and Get alias APIs + - Add list_executed_pipelines and require_data_stream to Bulk API + - Add include_model_definition to Get trained models API + - Add meta to Create data frame analytics API + - Add aggs to Create datafeeds API + - Add allow_no_indices, expand_wildcards, ignore_throttled and ignore_unavailable to Create anomaly detection jobs API +- 8.16.0: + * Support Python 3.13 (#2680) + * Emit Python warnings for beta and tech preview APIs (#2675). + * Vectorstore: use a retriever query for hybrid search (#2666) + * Allow retries for statuses other than 429 in streaming bulk (#2071, contributed by @ayayron) + * Make BulkIndexError and ScanError serializable (#2669, contributed by @seagrine) + * Fix import when trace is missing from opentelemetry package (#2694, contributed by @nicoloboschi) + * Update APIs: + - Fix nodes parameter in Task management API (contributed by @margaretpearce) + - Add Test query rule API + - Add Create Cross-Cluster API key and Update Cross-Cluster API key APIs + - Add experimental Verify snapshot repository API + - Add data_stream_name and settings to Delete auto-follow pattern API + - Add max_samples_per_key to Get async EQL status API + - Add lifecycle and remove unused data_retention and downsampling parameters from Put data stream lifecycle API + - Add include_remotes and remove flat_settings from Cluster stats API + - Add remote_indices to Create or update application privileges and Create or update roles APIs +- 8.15.1: + * Fix OTel context loss in parallel bulk helper (#2616) + * Use request converter to generate python examples (#2645) + * Add Geoip database configuration APIs: Create or update, Get and Delete + * Add q parameter to Update by Query API + * Add allow_no_indices and ignore_unavailable parameters to Resolve index API +- 8.15.0: + * Added the Connector API (#2623) + * Added support for semantic_text and semantic query. + * Added support for sequences of job id, model id and tags where applicable in ML APIs + * Added dry_run and force parameters to the Perform inference API + * Added optional Arrow deserialization support (#2632) + * Merged Query Ruleset API into new Query Rules API (#2607) + * Added mapping code examples (#2596) + * Fixed reference docs (#2629) + * Dropped Python 3.7 support (#2618) +- 8.14.0: + * Fixed node_pool_class override (#2581, contributed by @tallakh) + * Added retriever to the Search API + * Added deprecated and removed allow_auto_create from the Create or update component template API + * Added allow_auto_create, cause, deprecated, ignore_missing_component_templates and master_timeout to the Create or update index template API + * Added cause, removed flat_settings and timeout from the Create or update index template legacy API + * Removed various unsupported parameters from the Simulate index API + * Added various supported paramters to the Simulate index template API + * Added the completion and rerank task types to the Inference APIs + * Added the query and timeout parameters to the Perform inference API + * Added typed_keys to the Search Application Search API + * Added with_profile_uid to the Get API key information and Query API key information APIs +- 8.13.2: + * Added the ml.update_trained_model_deployment API + * Marked Requests 2.32.2 as incompatible with the Elasticsearch client +- 8.13.1: + * Added force_synthetic_source to the Get API + * Added wait_for_completion to the Create trained model API + * Added typed_keys to the Query API key information API +- 8.13.0: + * Added native OpenTelemetry support (#2435) + * Added optional orjson (a fast, correct JSON library) serialization support (#2493) + * Added the text_structure.test_grok_pattern API + * Added the indices.resolve_cluster API + * Renamed the model_id parameter to inference_id in the inference APIs + * Changed all synonyms APIs from experimental to stable. + * Fixed API key documentation (#2477, contributed by @iuliaferoli) +- 8.12.1: + * Fixed but deprecated parameter aliases in body parameter (#2427) + * Added mappings and bulk to quickstart page (#2417) + ------------------------------------------------------------------- Wed Jan 8 08:55:50 UTC 2025 - Daniel Garcia diff --git a/python-elasticsearch.spec b/python-elasticsearch.spec index 7ae9b43..f25a07c 100644 --- a/python-elasticsearch.spec +++ b/python-elasticsearch.spec @@ -20,15 +20,18 @@ Name: python-elasticsearch # DO NOT UPDATE until the compatible version of # python-elasticsearch-dsl is available -Version: 8.12.0 +Version: 8.17.0 Release: 0 Summary: Python client for Elasticsearch License: Apache-2.0 Group: Development/Languages/Python URL: https://github.com/elastic/elasticsearch-py Source: https://github.com/elastic/elasticsearch-py/archive/refs/tags/v%{version}.tar.gz +# PATCH-FIX-UPSTREAM 0001-Make-pyarrow-dependency-optional-for-tests.patch gh#elastic/elasticsearch-py#2733 +Patch1: 0001-Make-pyarrow-dependency-optional-for-tests.patch BuildRequires: %{python_module certifi} BuildRequires: %{python_module elastic-transport} +BuildRequires: %{python_module hatchling} BuildRequires: %{python_module pip} BuildRequires: %{python_module urllib3 >= 1.21.1} BuildRequires: %{python_module wheel} @@ -39,6 +42,7 @@ BuildArch: noarch # SECTION test BuildRequires: %{python_module PyYAML >= 5.4} BuildRequires: %{python_module aiohttp >= 3 with %python-aiohttp < 4} +BuildRequires: %{python_module orjson} BuildRequires: %{python_module pytest-asyncio} BuildRequires: %{python_module pytest} BuildRequires: %{python_module python-dateutil} @@ -69,8 +73,8 @@ donttest="test_sniff_uses_sniff_timeout or test_sniff_on_node_failure_triggers" %files %{python_files} %license LICENSE -%doc CODE_OF_CONDUCT.md CHANGELOG.md README.rst +%doc CODE_OF_CONDUCT.md CHANGELOG.md README.md %{python_sitelib}/elasticsearch -%{python_sitelib}/elasticsearch-%{version}.dist-info +%{python_sitelib}/elasticsearch-%{version}*-info %changelog diff --git a/v8.12.0.tar.gz b/v8.12.0.tar.gz deleted file mode 100644 index 7beef0a..0000000 --- a/v8.12.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4618c879499f01b8b7e46932934bd840829e1d34c2647a496b7503682abe1122 -size 906227 diff --git a/v8.17.0.tar.gz b/v8.17.0.tar.gz new file mode 100644 index 0000000..107217c --- /dev/null +++ b/v8.17.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9b7dc483f66a7549d56ce5d34801b408b512cce8f319c51d82bd302cd592e63 +size 1604639