elasticsearch 8.15.0__py3-none-any.whl → 8.16.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. elasticsearch/_async/client/__init__.py +202 -117
  2. elasticsearch/_async/client/async_search.py +25 -25
  3. elasticsearch/_async/client/autoscaling.py +24 -11
  4. elasticsearch/_async/client/cat.py +75 -66
  5. elasticsearch/_async/client/ccr.py +13 -13
  6. elasticsearch/_async/client/cluster.py +40 -37
  7. elasticsearch/_async/client/connector.py +112 -51
  8. elasticsearch/_async/client/dangling_indices.py +27 -12
  9. elasticsearch/_async/client/enrich.py +10 -10
  10. elasticsearch/_async/client/eql.py +4 -4
  11. elasticsearch/_async/client/esql.py +42 -4
  12. elasticsearch/_async/client/features.py +4 -3
  13. elasticsearch/_async/client/fleet.py +10 -2
  14. elasticsearch/_async/client/graph.py +1 -1
  15. elasticsearch/_async/client/ilm.py +16 -12
  16. elasticsearch/_async/client/indices.py +189 -108
  17. elasticsearch/_async/client/inference.py +15 -5
  18. elasticsearch/_async/client/ingest.py +200 -9
  19. elasticsearch/_async/client/license.py +10 -10
  20. elasticsearch/_async/client/logstash.py +3 -3
  21. elasticsearch/_async/client/migration.py +3 -3
  22. elasticsearch/_async/client/ml.py +294 -291
  23. elasticsearch/_async/client/monitoring.py +1 -1
  24. elasticsearch/_async/client/nodes.py +16 -8
  25. elasticsearch/_async/client/query_rules.py +61 -8
  26. elasticsearch/_async/client/rollup.py +23 -9
  27. elasticsearch/_async/client/search_application.py +35 -16
  28. elasticsearch/_async/client/searchable_snapshots.py +13 -5
  29. elasticsearch/_async/client/security.py +371 -180
  30. elasticsearch/_async/client/slm.py +9 -9
  31. elasticsearch/_async/client/snapshot.py +97 -12
  32. elasticsearch/_async/client/sql.py +11 -7
  33. elasticsearch/_async/client/ssl.py +18 -3
  34. elasticsearch/_async/client/synonyms.py +10 -8
  35. elasticsearch/_async/client/tasks.py +19 -9
  36. elasticsearch/_async/client/text_structure.py +2 -2
  37. elasticsearch/_async/client/transform.py +78 -72
  38. elasticsearch/_async/client/utils.py +4 -0
  39. elasticsearch/_async/client/watcher.py +11 -11
  40. elasticsearch/_async/client/xpack.py +5 -3
  41. elasticsearch/_async/helpers.py +19 -10
  42. elasticsearch/_otel.py +23 -1
  43. elasticsearch/_sync/client/__init__.py +202 -117
  44. elasticsearch/_sync/client/async_search.py +25 -25
  45. elasticsearch/_sync/client/autoscaling.py +24 -11
  46. elasticsearch/_sync/client/cat.py +75 -66
  47. elasticsearch/_sync/client/ccr.py +13 -13
  48. elasticsearch/_sync/client/cluster.py +40 -37
  49. elasticsearch/_sync/client/connector.py +112 -51
  50. elasticsearch/_sync/client/dangling_indices.py +27 -12
  51. elasticsearch/_sync/client/enrich.py +10 -10
  52. elasticsearch/_sync/client/eql.py +4 -4
  53. elasticsearch/_sync/client/esql.py +42 -4
  54. elasticsearch/_sync/client/features.py +4 -3
  55. elasticsearch/_sync/client/fleet.py +10 -2
  56. elasticsearch/_sync/client/graph.py +1 -1
  57. elasticsearch/_sync/client/ilm.py +16 -12
  58. elasticsearch/_sync/client/indices.py +189 -108
  59. elasticsearch/_sync/client/inference.py +15 -5
  60. elasticsearch/_sync/client/ingest.py +200 -9
  61. elasticsearch/_sync/client/license.py +10 -10
  62. elasticsearch/_sync/client/logstash.py +3 -3
  63. elasticsearch/_sync/client/migration.py +3 -3
  64. elasticsearch/_sync/client/ml.py +294 -291
  65. elasticsearch/_sync/client/monitoring.py +1 -1
  66. elasticsearch/_sync/client/nodes.py +16 -8
  67. elasticsearch/_sync/client/query_rules.py +61 -8
  68. elasticsearch/_sync/client/rollup.py +23 -9
  69. elasticsearch/_sync/client/search_application.py +35 -16
  70. elasticsearch/_sync/client/searchable_snapshots.py +13 -5
  71. elasticsearch/_sync/client/security.py +371 -180
  72. elasticsearch/_sync/client/slm.py +9 -9
  73. elasticsearch/_sync/client/snapshot.py +97 -12
  74. elasticsearch/_sync/client/sql.py +11 -7
  75. elasticsearch/_sync/client/ssl.py +18 -3
  76. elasticsearch/_sync/client/synonyms.py +10 -8
  77. elasticsearch/_sync/client/tasks.py +19 -9
  78. elasticsearch/_sync/client/text_structure.py +2 -2
  79. elasticsearch/_sync/client/transform.py +78 -72
  80. elasticsearch/_sync/client/utils.py +40 -0
  81. elasticsearch/_sync/client/watcher.py +11 -11
  82. elasticsearch/_sync/client/xpack.py +5 -3
  83. elasticsearch/_version.py +1 -1
  84. elasticsearch/exceptions.py +4 -0
  85. elasticsearch/helpers/actions.py +134 -111
  86. elasticsearch/helpers/errors.py +12 -4
  87. elasticsearch/helpers/vectorstore/_async/strategies.py +30 -9
  88. elasticsearch/helpers/vectorstore/_sync/strategies.py +30 -9
  89. {elasticsearch-8.15.0.dist-info → elasticsearch-8.16.0.dist-info}/METADATA +6 -7
  90. elasticsearch-8.16.0.dist-info/RECORD +117 -0
  91. {elasticsearch-8.15.0.dist-info → elasticsearch-8.16.0.dist-info}/WHEEL +1 -1
  92. elasticsearch-8.15.0.dist-info/RECORD +0 -117
  93. {elasticsearch-8.15.0.dist-info → elasticsearch-8.16.0.dist-info}/licenses/LICENSE +0 -0
  94. {elasticsearch-8.15.0.dist-info → elasticsearch-8.16.0.dist-info}/licenses/NOTICE +0 -0
@@ -34,6 +34,8 @@ from typing import (
34
34
  Union,
35
35
  )
36
36
 
37
+ from elastic_transport import OpenTelemetrySpan
38
+
37
39
  from .. import Elasticsearch
38
40
  from ..compat import to_bytes
39
41
  from ..exceptions import ApiError, NotFoundError, TransportError
@@ -322,6 +324,7 @@ def _process_bulk_chunk(
322
324
  Tuple[_TYPE_BULK_ACTION_HEADER, _TYPE_BULK_ACTION_BODY],
323
325
  ]
324
326
  ],
327
+ otel_span: OpenTelemetrySpan,
325
328
  raise_on_exception: bool = True,
326
329
  raise_on_error: bool = True,
327
330
  ignore_status: Union[int, Collection[int]] = (),
@@ -331,28 +334,29 @@ def _process_bulk_chunk(
331
334
  """
332
335
  Send a bulk request to elasticsearch and process the output.
333
336
  """
334
- if isinstance(ignore_status, int):
335
- ignore_status = (ignore_status,)
336
-
337
- try:
338
- # send the actual request
339
- resp = client.bulk(*args, operations=bulk_actions, **kwargs) # type: ignore[arg-type]
340
- except ApiError as e:
341
- gen = _process_bulk_chunk_error(
342
- error=e,
343
- bulk_data=bulk_data,
344
- ignore_status=ignore_status,
345
- raise_on_exception=raise_on_exception,
346
- raise_on_error=raise_on_error,
347
- )
348
- else:
349
- gen = _process_bulk_chunk_success(
350
- resp=resp.body,
351
- bulk_data=bulk_data,
352
- ignore_status=ignore_status,
353
- raise_on_error=raise_on_error,
354
- )
355
- yield from gen
337
+ with client._otel.use_span(otel_span):
338
+ if isinstance(ignore_status, int):
339
+ ignore_status = (ignore_status,)
340
+
341
+ try:
342
+ # send the actual request
343
+ resp = client.bulk(*args, operations=bulk_actions, **kwargs) # type: ignore[arg-type]
344
+ except ApiError as e:
345
+ gen = _process_bulk_chunk_error(
346
+ error=e,
347
+ bulk_data=bulk_data,
348
+ ignore_status=ignore_status,
349
+ raise_on_exception=raise_on_exception,
350
+ raise_on_error=raise_on_error,
351
+ )
352
+ else:
353
+ gen = _process_bulk_chunk_success(
354
+ resp=resp.body,
355
+ bulk_data=bulk_data,
356
+ ignore_status=ignore_status,
357
+ raise_on_error=raise_on_error,
358
+ )
359
+ yield from gen
356
360
 
357
361
 
358
362
  def streaming_bulk(
@@ -370,6 +374,8 @@ def streaming_bulk(
370
374
  max_backoff: float = 600,
371
375
  yield_ok: bool = True,
372
376
  ignore_status: Union[int, Collection[int]] = (),
377
+ retry_on_status: Union[int, Collection[int]] = (429,),
378
+ span_name: str = "helpers.streaming_bulk",
373
379
  *args: Any,
374
380
  **kwargs: Any,
375
381
  ) -> Iterable[Tuple[bool, Dict[str, Any]]]:
@@ -381,10 +387,11 @@ def streaming_bulk(
381
387
  entire input is consumed and sent.
382
388
 
383
389
  If you specify ``max_retries`` it will also retry any documents that were
384
- rejected with a ``429`` status code. To do this it will wait (**by calling
385
- time.sleep which will block**) for ``initial_backoff`` seconds and then,
386
- every subsequent rejection for the same chunk, for double the time every
387
- time up to ``max_backoff`` seconds.
390
+ rejected with a ``429`` status code. Use ``retry_on_status`` to
391
+ configure which status codes will be retried. To do this it will wait
392
+ (**by calling time.sleep which will block**) for ``initial_backoff`` seconds
393
+ and then, every subsequent rejection for the same chunk, for double the time
394
+ every time up to ``max_backoff`` seconds.
388
395
 
389
396
  :arg client: instance of :class:`~elasticsearch.Elasticsearch` to use
390
397
  :arg actions: iterable containing the actions to be executed
@@ -397,8 +404,11 @@ def streaming_bulk(
397
404
  :arg expand_action_callback: callback executed on each action passed in,
398
405
  should return a tuple containing the action line and the data line
399
406
  (`None` if data line should be omitted).
407
+ :arg retry_on_status: HTTP status code that will trigger a retry.
408
+ (if `None` is specified only status 429 will retry).
400
409
  :arg max_retries: maximum number of times a document will be retried when
401
- ``429`` is received, set to 0 (default) for no retries on ``429``
410
+ retry_on_status (defaulting to ``429``) is received,
411
+ set to 0 (default) for no retries
402
412
  :arg initial_backoff: number of seconds we should wait before the first
403
413
  retry. Any subsequent retries will be powers of ``initial_backoff *
404
414
  2**retry_number``
@@ -406,73 +416,82 @@ def streaming_bulk(
406
416
  :arg yield_ok: if set to False will skip successful documents in the output
407
417
  :arg ignore_status: list of HTTP status code that you want to ignore
408
418
  """
409
- client = client.options()
410
- client._client_meta = (("h", "bp"),)
419
+ with client._otel.helpers_span(span_name) as otel_span:
420
+ client = client.options()
421
+ client._client_meta = (("h", "bp"),)
411
422
 
412
- serializer = client.transport.serializers.get_serializer("application/json")
423
+ if isinstance(retry_on_status, int):
424
+ retry_on_status = (retry_on_status,)
413
425
 
414
- bulk_data: List[
415
- Union[
416
- Tuple[_TYPE_BULK_ACTION_HEADER],
417
- Tuple[_TYPE_BULK_ACTION_HEADER, _TYPE_BULK_ACTION_BODY],
418
- ]
419
- ]
420
- bulk_actions: List[bytes]
421
- for bulk_data, bulk_actions in _chunk_actions(
422
- map(expand_action_callback, actions), chunk_size, max_chunk_bytes, serializer
423
- ):
424
- for attempt in range(max_retries + 1):
425
- to_retry: List[bytes] = []
426
- to_retry_data: List[
427
- Union[
428
- Tuple[_TYPE_BULK_ACTION_HEADER],
429
- Tuple[_TYPE_BULK_ACTION_HEADER, _TYPE_BULK_ACTION_BODY],
430
- ]
431
- ] = []
432
- if attempt:
433
- time.sleep(min(max_backoff, initial_backoff * 2 ** (attempt - 1)))
426
+ serializer = client.transport.serializers.get_serializer("application/json")
434
427
 
435
- try:
436
- for data, (ok, info) in zip(
437
- bulk_data,
438
- _process_bulk_chunk(
439
- client,
440
- bulk_actions,
428
+ bulk_data: List[
429
+ Union[
430
+ Tuple[_TYPE_BULK_ACTION_HEADER],
431
+ Tuple[_TYPE_BULK_ACTION_HEADER, _TYPE_BULK_ACTION_BODY],
432
+ ]
433
+ ]
434
+ bulk_actions: List[bytes]
435
+ for bulk_data, bulk_actions in _chunk_actions(
436
+ map(expand_action_callback, actions),
437
+ chunk_size,
438
+ max_chunk_bytes,
439
+ serializer,
440
+ ):
441
+ for attempt in range(max_retries + 1):
442
+ to_retry: List[bytes] = []
443
+ to_retry_data: List[
444
+ Union[
445
+ Tuple[_TYPE_BULK_ACTION_HEADER],
446
+ Tuple[_TYPE_BULK_ACTION_HEADER, _TYPE_BULK_ACTION_BODY],
447
+ ]
448
+ ] = []
449
+ if attempt:
450
+ time.sleep(min(max_backoff, initial_backoff * 2 ** (attempt - 1)))
451
+
452
+ try:
453
+ for data, (ok, info) in zip(
441
454
  bulk_data,
442
- raise_on_exception,
443
- raise_on_error,
444
- ignore_status,
445
- *args,
446
- **kwargs,
447
- ),
448
- ):
449
- if not ok:
450
- action, info = info.popitem()
451
- # retry if retries enabled, we get 429, and we are not
452
- # in the last attempt
453
- if (
454
- max_retries
455
- and info["status"] == 429
456
- and (attempt + 1) <= max_retries
457
- ):
458
- # _process_bulk_chunk expects bytes so we need to
459
- # re-serialize the data
460
- to_retry.extend(map(serializer.dumps, data))
461
- to_retry_data.append(data)
462
- else:
463
- yield ok, {action: info}
464
- elif yield_ok:
465
- yield ok, info
466
-
467
- except ApiError as e:
468
- # suppress 429 errors since we will retry them
469
- if attempt == max_retries or e.status_code != 429:
470
- raise
471
- else:
472
- if not to_retry:
473
- break
474
- # retry only subset of documents that didn't succeed
475
- bulk_actions, bulk_data = to_retry, to_retry_data
455
+ _process_bulk_chunk(
456
+ client,
457
+ bulk_actions,
458
+ bulk_data,
459
+ otel_span,
460
+ raise_on_exception,
461
+ raise_on_error,
462
+ ignore_status,
463
+ *args,
464
+ **kwargs,
465
+ ),
466
+ ):
467
+ if not ok:
468
+ action, info = info.popitem()
469
+ # retry if retries enabled, we are not in the last attempt,
470
+ # and status in retry_on_status (defaulting to 429)
471
+ if (
472
+ max_retries
473
+ and info["status"] in retry_on_status
474
+ and (attempt + 1) <= max_retries
475
+ ):
476
+ # _process_bulk_chunk expects bytes so we need to
477
+ # re-serialize the data
478
+ to_retry.extend(map(serializer.dumps, data))
479
+ to_retry_data.append(data)
480
+ else:
481
+ yield ok, {action: info}
482
+ elif yield_ok:
483
+ yield ok, info
484
+
485
+ except ApiError as e:
486
+ # suppress any status in retry_on_status (429 by default)
487
+ # since we will retry them
488
+ if attempt == max_retries or e.status_code not in retry_on_status:
489
+ raise
490
+ else:
491
+ if not to_retry:
492
+ break
493
+ # retry only subset of documents that didn't succeed
494
+ bulk_actions, bulk_data = to_retry, to_retry_data
476
495
 
477
496
 
478
497
  def bulk(
@@ -519,7 +538,7 @@ def bulk(
519
538
  # make streaming_bulk yield successful results so we can count them
520
539
  kwargs["yield_ok"] = True
521
540
  for ok, item in streaming_bulk(
522
- client, actions, ignore_status=ignore_status, *args, **kwargs # type: ignore[misc]
541
+ client, actions, ignore_status=ignore_status, span_name="helpers.bulk", *args, **kwargs # type: ignore[misc]
523
542
  ):
524
543
  # go through request-response pairs and detect failures
525
544
  if not ok:
@@ -589,27 +608,31 @@ def parallel_bulk(
589
608
  ] = Queue(max(queue_size, thread_count))
590
609
  self._quick_put = self._inqueue.put
591
610
 
592
- pool = BlockingPool(thread_count)
593
-
594
- try:
595
- for result in pool.imap(
596
- lambda bulk_chunk: list(
597
- _process_bulk_chunk(
598
- client,
599
- bulk_chunk[1],
600
- bulk_chunk[0],
601
- ignore_status=ignore_status, # type: ignore[misc]
602
- *args,
603
- **kwargs,
604
- )
605
- ),
606
- _chunk_actions(expanded_actions, chunk_size, max_chunk_bytes, serializer),
607
- ):
608
- yield from result
611
+ with client._otel.helpers_span("helpers.parallel_bulk") as otel_span:
612
+ pool = BlockingPool(thread_count)
609
613
 
610
- finally:
611
- pool.close()
612
- pool.join()
614
+ try:
615
+ for result in pool.imap(
616
+ lambda bulk_chunk: list(
617
+ _process_bulk_chunk(
618
+ client,
619
+ bulk_chunk[1],
620
+ bulk_chunk[0],
621
+ otel_span=otel_span,
622
+ ignore_status=ignore_status, # type: ignore[misc]
623
+ *args,
624
+ **kwargs,
625
+ )
626
+ ),
627
+ _chunk_actions(
628
+ expanded_actions, chunk_size, max_chunk_bytes, serializer
629
+ ),
630
+ ):
631
+ yield from result
632
+
633
+ finally:
634
+ pool.close()
635
+ pool.join()
613
636
 
614
637
 
615
638
  def scan(
@@ -15,18 +15,26 @@
15
15
  # specific language governing permissions and limitations
16
16
  # under the License.
17
17
 
18
- from typing import Any, Dict, List
18
+ from typing import Any, Dict, List, Tuple, Type
19
19
 
20
20
 
21
21
  class BulkIndexError(Exception):
22
- def __init__(self, message: Any, errors: List[Dict[str, Any]]):
22
+ def __init__(self, message: str, errors: List[Dict[str, Any]]):
23
23
  super().__init__(message)
24
24
  self.errors: List[Dict[str, Any]] = errors
25
25
 
26
+ def __reduce__(
27
+ self,
28
+ ) -> Tuple[Type["BulkIndexError"], Tuple[str, List[Dict[str, Any]]]]:
29
+ return (self.__class__, (self.args[0], self.errors))
30
+
26
31
 
27
32
  class ScanError(Exception):
28
33
  scroll_id: str
29
34
 
30
- def __init__(self, scroll_id: str, *args: Any, **kwargs: Any) -> None:
31
- super().__init__(*args, **kwargs)
35
+ def __init__(self, scroll_id: str, *args: Any) -> None:
36
+ super().__init__(*args)
32
37
  self.scroll_id = scroll_id
38
+
39
+ def __reduce__(self) -> Tuple[Type["ScanError"], Tuple[str, str]]:
40
+ return (self.__class__, (self.scroll_id,) + self.args)
@@ -283,10 +283,9 @@ class AsyncDenseVectorStrategy(AsyncRetrievalStrategy):
283
283
  ) -> Dict[str, Any]:
284
284
  # Add a query to the knn query.
285
285
  # RRF is used to even the score from the knn query and text query
286
- # RRF has two optional parameters: {'rank_constant':int, 'window_size':int}
286
+ # RRF has two optional parameters: {'rank_constant':int, 'rank_window_size':int}
287
287
  # https://www.elastic.co/guide/en/elasticsearch/reference/current/rrf.html
288
- query_body = {
289
- "knn": knn,
288
+ standard_query = {
290
289
  "query": {
291
290
  "bool": {
292
291
  "must": [
@@ -300,14 +299,36 @@ class AsyncDenseVectorStrategy(AsyncRetrievalStrategy):
300
299
  ],
301
300
  "filter": filter,
302
301
  }
303
- },
302
+ }
304
303
  }
305
304
 
306
- if isinstance(self.rrf, Dict):
307
- query_body["rank"] = {"rrf": self.rrf}
308
- elif isinstance(self.rrf, bool) and self.rrf is True:
309
- query_body["rank"] = {"rrf": {}}
310
-
305
+ if self.rrf is False:
306
+ query_body = {
307
+ "knn": knn,
308
+ **standard_query,
309
+ }
310
+ else:
311
+ rrf_options = {}
312
+ if isinstance(self.rrf, Dict):
313
+ if "rank_constant" in self.rrf:
314
+ rrf_options["rank_constant"] = self.rrf["rank_constant"]
315
+ if "window_size" in self.rrf:
316
+ # 'window_size' was renamed to 'rank_window_size', but we support
317
+ # the older name for backwards compatibility
318
+ rrf_options["rank_window_size"] = self.rrf["window_size"]
319
+ if "rank_window_size" in self.rrf:
320
+ rrf_options["rank_window_size"] = self.rrf["rank_window_size"]
321
+ query_body = {
322
+ "retriever": {
323
+ "rrf": {
324
+ "retrievers": [
325
+ {"standard": standard_query},
326
+ {"knn": knn},
327
+ ],
328
+ **rrf_options,
329
+ },
330
+ },
331
+ }
311
332
  return query_body
312
333
 
313
334
  def needs_inference(self) -> bool:
@@ -283,10 +283,9 @@ class DenseVectorStrategy(RetrievalStrategy):
283
283
  ) -> Dict[str, Any]:
284
284
  # Add a query to the knn query.
285
285
  # RRF is used to even the score from the knn query and text query
286
- # RRF has two optional parameters: {'rank_constant':int, 'window_size':int}
286
+ # RRF has two optional parameters: {'rank_constant':int, 'rank_window_size':int}
287
287
  # https://www.elastic.co/guide/en/elasticsearch/reference/current/rrf.html
288
- query_body = {
289
- "knn": knn,
288
+ standard_query = {
290
289
  "query": {
291
290
  "bool": {
292
291
  "must": [
@@ -300,14 +299,36 @@ class DenseVectorStrategy(RetrievalStrategy):
300
299
  ],
301
300
  "filter": filter,
302
301
  }
303
- },
302
+ }
304
303
  }
305
304
 
306
- if isinstance(self.rrf, Dict):
307
- query_body["rank"] = {"rrf": self.rrf}
308
- elif isinstance(self.rrf, bool) and self.rrf is True:
309
- query_body["rank"] = {"rrf": {}}
310
-
305
+ if self.rrf is False:
306
+ query_body = {
307
+ "knn": knn,
308
+ **standard_query,
309
+ }
310
+ else:
311
+ rrf_options = {}
312
+ if isinstance(self.rrf, Dict):
313
+ if "rank_constant" in self.rrf:
314
+ rrf_options["rank_constant"] = self.rrf["rank_constant"]
315
+ if "window_size" in self.rrf:
316
+ # 'window_size' was renamed to 'rank_window_size', but we support
317
+ # the older name for backwards compatibility
318
+ rrf_options["rank_window_size"] = self.rrf["window_size"]
319
+ if "rank_window_size" in self.rrf:
320
+ rrf_options["rank_window_size"] = self.rrf["rank_window_size"]
321
+ query_body = {
322
+ "retriever": {
323
+ "rrf": {
324
+ "retrievers": [
325
+ {"standard": standard_query},
326
+ {"knn": knn},
327
+ ],
328
+ **rrf_options,
329
+ },
330
+ },
331
+ }
311
332
  return query_body
312
333
 
313
334
  def needs_inference(self) -> bool:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: elasticsearch
3
- Version: 8.15.0
3
+ Version: 8.16.0
4
4
  Summary: Python client for Elasticsearch
5
5
  Project-URL: Documentation, https://elasticsearch-py.readthedocs.io/
6
6
  Project-URL: Homepage, https://github.com/elastic/elasticsearch-py
@@ -8,9 +8,7 @@ Project-URL: Issue Tracker, https://github.com/elastic/elasticsearch-py/issues
8
8
  Project-URL: Source Code, https://github.com/elastic/elasticsearch-py
9
9
  Author-email: Elastic Client Library Maintainers <client-libs@elastic.co>
10
10
  Maintainer-email: Elastic Client Library Maintainers <client-libs@elastic.co>
11
- License-Expression: Apache-2.0
12
- License-File: LICENSE
13
- License-File: NOTICE
11
+ License: Apache-2.0
14
12
  Keywords: REST,client,elastic,elasticsearch,index,kibana,mapping,search
15
13
  Classifier: Development Status :: 5 - Production/Stable
16
14
  Classifier: Intended Audience :: Developers
@@ -23,10 +21,11 @@ Classifier: Programming Language :: Python :: 3.9
23
21
  Classifier: Programming Language :: Python :: 3.10
24
22
  Classifier: Programming Language :: Python :: 3.11
25
23
  Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
26
25
  Classifier: Programming Language :: Python :: Implementation :: CPython
27
26
  Classifier: Programming Language :: Python :: Implementation :: PyPy
28
27
  Requires-Python: >=3.8
29
- Requires-Dist: elastic-transport<9,>=8.13
28
+ Requires-Dist: elastic-transport<9,>=8.15.1
30
29
  Provides-Extra: async
31
30
  Requires-Dist: aiohttp<4,>=3; extra == 'async'
32
31
  Provides-Extra: dev
@@ -48,13 +47,13 @@ Requires-Dist: pytest-cov; extra == 'dev'
48
47
  Requires-Dist: python-dateutil; extra == 'dev'
49
48
  Requires-Dist: pyyaml>=5.4; extra == 'dev'
50
49
  Requires-Dist: requests<3,>=2; extra == 'dev'
51
- Requires-Dist: simsimd; extra == 'dev'
50
+ Requires-Dist: simsimd; (python_version < '3.13') and extra == 'dev'
52
51
  Requires-Dist: twine; extra == 'dev'
53
52
  Requires-Dist: unasync; extra == 'dev'
54
53
  Provides-Extra: docs
55
54
  Requires-Dist: sphinx; extra == 'docs'
56
55
  Requires-Dist: sphinx-autodoc-typehints; extra == 'docs'
57
- Requires-Dist: sphinx-rtd-theme; extra == 'docs'
56
+ Requires-Dist: sphinx-rtd-theme>=2.0; extra == 'docs'
58
57
  Provides-Extra: orjson
59
58
  Requires-Dist: orjson>=3; extra == 'orjson'
60
59
  Provides-Extra: pyarrow
@@ -0,0 +1,117 @@
1
+ elasticsearch/__init__.py,sha256=w5YnO16zjOi6loGJ8caUgSXsj3b-Y8OfF0BIddP2BiE,3289
2
+ elasticsearch/_otel.py,sha256=Oidt86g9XzeVrwMsJeV7dGLsyquVMJWfhcRlz43RlGo,4188
3
+ elasticsearch/_utils.py,sha256=Vr_aNG5ddxInE1PgDpCXMYpXBTNUFM9nYrgbw-cjeCc,1419
4
+ elasticsearch/_version.py,sha256=cCncJ6G7egEMKO8B9tVa2tUhTcFqEnR8lddtJz7b2Ag,814
5
+ elasticsearch/client.py,sha256=Zik8KKnpJBvbapk4BhZXC7PZiuZwWqtcmMARDNXMwlA,5213
6
+ elasticsearch/compat.py,sha256=hL3mtqVxWwxeiFbNGADva5XruAwK-A6xcu-vrpnDXFs,2657
7
+ elasticsearch/exceptions.py,sha256=ynpP0TLJxur7x7JQJD-CFtXov0bPImGt234gdlAyv6g,4142
8
+ elasticsearch/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ elasticsearch/serializer.py,sha256=vLhhlU6fAjHXB-z2E5ieBe_XKWx4A0o-lbJY9Bknt70,8059
10
+ elasticsearch/transport.py,sha256=CxKo2USPQ-6q4x8Ckfq_dUFWhA1s98p75ghXc3breJI,2248
11
+ elasticsearch/_async/__init__.py,sha256=TZps9WjF-TaSNzBvW5wUCgXRcbHnvE_9xAynBHsMtSo,787
12
+ elasticsearch/_async/helpers.py,sha256=E-nZfxH4qtEFSm33wy1sJ3kHM5aEwcxIFPiho7AeW5w,22802
13
+ elasticsearch/_async/client/__init__.py,sha256=p9ZTGVSW8aoSntzAYCiXdCHDkUzm_8IXEGoEX2orVLQ,250098
14
+ elasticsearch/_async/client/_base.py,sha256=wDJIs-4Z_fDBF0_XvfCmfSuyL6Oh8I2nSGDZyP91XCU,15531
15
+ elasticsearch/_async/client/async_search.py,sha256=is7Y2c9hx10og5vhrK5vQHK6LYetY2LYhty1bpz1Nso,30504
16
+ elasticsearch/_async/client/autoscaling.py,sha256=rOChE7GopR3lfuRgeygHPmHZ5ngMN-WXR45WEdBuYJM,8895
17
+ elasticsearch/_async/client/cat.py,sha256=VYDAT38C0BjI2-EOXJUdNPXXKeSzjRyDX9zChvWs7CY,138917
18
+ elasticsearch/_async/client/ccr.py,sha256=mEp7DA59ePYU1ufU6ESsfdZX-0IpS858mXtG1CwCLkg,36972
19
+ elasticsearch/_async/client/cluster.py,sha256=FeblXwD7_8SeEnpLpFJzluj7acPlcOmr2qceYwTyW6U,50606
20
+ elasticsearch/_async/client/connector.py,sha256=37-etm0MX5wwJPSAxPWBSp10pablnP_BAAioykh4xNs,61311
21
+ elasticsearch/_async/client/dangling_indices.py,sha256=zDhhAeTUvPl3TVT1EuXMm4RFLXSjNJS5qccnjViQfyA,8354
22
+ elasticsearch/_async/client/enrich.py,sha256=Gww5cfDzTTT-IJsuBRZPjp455ONCxC4oehWjCDGHbQ0,9750
23
+ elasticsearch/_async/client/eql.py,sha256=5G8QvXsSR4dIlspyGFa9ha3dQIklUzjCfUCvSgVGSOk,13138
24
+ elasticsearch/_async/client/esql.py,sha256=VK7y0yzko9iQJM1QTM1mCxnwmivjADVRJ6J9ly5qt_Q,6183
25
+ elasticsearch/_async/client/features.py,sha256=LSLT_dp9K9IiEjhbHjLurdo1sXIxrlMkWbGgdDWxkxM,3629
26
+ elasticsearch/_async/client/fleet.py,sha256=5VY0-h7LCmksa0fzXLFUX34EoNFkugUxNXZBJpa9md4,31300
27
+ elasticsearch/_async/client/graph.py,sha256=4cseN8MymM6nsWuxA__PS-SE4VqAPteTWMI0u2zfZRY,4594
28
+ elasticsearch/_async/client/ilm.py,sha256=xn8FYGihL4xzz0WqNUaTTynhJI3wN4eaKqBI36l6bco,24222
29
+ elasticsearch/_async/client/indices.py,sha256=XpD4A6kIeg1hXxA3GvB84qUhG_TI0dntUE21aAQ8T6o,221453
30
+ elasticsearch/_async/client/inference.py,sha256=_eBRxreOSD4Y39Jntdwqr9BQR8osY5ix1lkdtsCXLoQ,12508
31
+ elasticsearch/_async/client/ingest.py,sha256=omwEgiLAt7obl9FJb8yHMcBtIDImkZJ440A_UIWdAAs,24051
32
+ elasticsearch/_async/client/license.py,sha256=85L9YhnJpwWwXXK_EKnJrB4Jw3iif-dySSz504XF33Q,12956
33
+ elasticsearch/_async/client/logstash.py,sha256=mhnvDiLp9lBQrmiK-5lpuAU3zkde94RwkaemZiCNvTc,6136
34
+ elasticsearch/_async/client/migration.py,sha256=TmqOovsIqd2hgQsr7lPOT5yODY1I2kKotYzRugAZcDE,5331
35
+ elasticsearch/_async/client/ml.py,sha256=gIb3w-GB_9h419m63KDJrtdOodUBwlHJ6X94fPUn1SM,258760
36
+ elasticsearch/_async/client/monitoring.py,sha256=GtoD_JztiOf5s3d3TG4gp2MH67Hsg98GSDG8lK13VHU,3818
37
+ elasticsearch/_async/client/nodes.py,sha256=5vhhl10VdUGeVpoHK2k-HNjtSJ4lZlYvLRfg1zvjF4E,24242
38
+ elasticsearch/_async/client/query_rules.py,sha256=Tryx9Q2jVoLkT_FJ_s7KzLqzHUyvlhGbYV5cc41aENA,16947
39
+ elasticsearch/_async/client/rollup.py,sha256=w2mRQskar9WQF8U2Cgt-GVjImOBc6v4Vde5pBH439Fs,21268
40
+ elasticsearch/_async/client/search_application.py,sha256=wb-DrkJtCL4e1-W4mNggdY4DjWGF7EId93STmmbzvXM,16101
41
+ elasticsearch/_async/client/searchable_snapshots.py,sha256=fvSKFUNQJvxCrevlvaBcznb9GB3L-mTWjfMfHmzuoL0,11788
42
+ elasticsearch/_async/client/security.py,sha256=tawwwaqMFpvdQ3W_JHd2x2--nm-5YJtTEhpZ4kD_9Fg,162146
43
+ elasticsearch/_async/client/shutdown.py,sha256=VLUD0VL065THNNuXB4lrA66aAPb_v2WW5oJfJNlfJcs,11350
44
+ elasticsearch/_async/client/slm.py,sha256=jPHUwg17EMh6Gykll33sNiLK9xBW98kvlBh3xYtW-T4,16120
45
+ elasticsearch/_async/client/snapshot.py,sha256=PCoTFnrs6l3fOGxO2_S79E2GSVfbfxT-Z0Oj9x3PkVk,41082
46
+ elasticsearch/_async/client/sql.py,sha256=OEWS3TEuBYHMMaB5otAEa2ie-aljr-UKJ4ThGHa5_xI,17956
47
+ elasticsearch/_async/client/ssl.py,sha256=52KlTmyJfeU2mqq7h7Ch7d14NdmrpSrL1_kanLaVEm4,3636
48
+ elasticsearch/_async/client/synonyms.py,sha256=4vi7EKdQGM5DZizgf99wwmJJYokTUEkA9QdBiX5MTp0,13851
49
+ elasticsearch/_async/client/tasks.py,sha256=KdJn7yVleLOCeVpuJZQPLEbPSF6nDvSG0J3mPo5jbmc,9315
50
+ elasticsearch/_async/client/text_structure.py,sha256=IU5K1CFDcoed8kJLmJHSdjqfL7Pur9GBeZ5r6jozxHM,12046
51
+ elasticsearch/_async/client/transform.py,sha256=G9sFSqNuh7yC3HYjLSQyoGGYJRHQJdIgZin0IwzSNK4,42542
52
+ elasticsearch/_async/client/utils.py,sha256=h64qW1YcQZoJdEpDiYqkgnD3Q_0r2Y_ltUiNpNzpekI,1449
53
+ elasticsearch/_async/client/watcher.py,sha256=HIBQ8dNRYrK1X52wBJJTSpqBNZyu8EADQmIJ7jjO9yc,26482
54
+ elasticsearch/_async/client/xpack.py,sha256=lnTOOBYxQu8IzLR5OkJh1raEp2SRax_eXBiYcf5FsO4,4628
55
+ elasticsearch/_sync/__init__.py,sha256=TZps9WjF-TaSNzBvW5wUCgXRcbHnvE_9xAynBHsMtSo,787
56
+ elasticsearch/_sync/client/__init__.py,sha256=wVd4Aoy8GvrMcai1TDtEjxyFgvkoiTxgmVIpg7jjMi4,249467
57
+ elasticsearch/_sync/client/_base.py,sha256=LesRKQzvgstEPn-hzoY7PBq_4hAyPCzjGiUggGn-fB8,15461
58
+ elasticsearch/_sync/client/async_search.py,sha256=znGy_0Bh5nQl_y1tWE0UxsxYQlSZu0IuxPOx8hYm2PA,30456
59
+ elasticsearch/_sync/client/autoscaling.py,sha256=MEaVghDLVN8Gv_LH1HoiNXdUAY7c2-Sxla4pCpxZAAU,8847
60
+ elasticsearch/_sync/client/cat.py,sha256=-X9Xat5nTYMVMoUR_KHNK20seuD9enZqR1VX4LoDgGg,138605
61
+ elasticsearch/_sync/client/ccr.py,sha256=vgHVO4OTcl24uEHbAFTAm8LQJuu65AtZwpIY0pOGQiU,36816
62
+ elasticsearch/_sync/client/cluster.py,sha256=TGMf8eGKnqF7PiOvzaHl3hbvOu0e0rygSQ6qwvRfbZA,50414
63
+ elasticsearch/_sync/client/connector.py,sha256=9yaeSJErNQRYukWFCWsauF3BjAi-_UZIge-PhBtEoXk,61011
64
+ elasticsearch/_sync/client/dangling_indices.py,sha256=FmL09mX2gkcT_IkPCd7QXlm2YfyN42twwWIfq0tnQKw,8318
65
+ elasticsearch/_sync/client/enrich.py,sha256=0dIcKN-QXa8zR52Z_wc0hmGR2DJw1UsY2fhaCKjRP1Q,9690
66
+ elasticsearch/_sync/client/eql.py,sha256=9sy4NhvcQhKpahHtHM_mpFfLoQ1dClyywmh8RY6cHfs,13090
67
+ elasticsearch/_sync/client/esql.py,sha256=_7ePOiPm__rGcQ-buZ41nS3ef8UGGdfsJIQe5XnYU4w,6171
68
+ elasticsearch/_sync/client/features.py,sha256=XZT8skOz9qeLTVegheBUjDtwMy8Q2hklbgGULdXHLOY,3605
69
+ elasticsearch/_sync/client/fleet.py,sha256=PGcQHK2IvRFHFMCqYDnIjqYyorTRAAmEvoMkOVDcSdE,31264
70
+ elasticsearch/_sync/client/graph.py,sha256=hwsCdovvD6HCAqPSAq2o0mclhWQdDwVUHkyYekA0Pyo,4582
71
+ elasticsearch/_sync/client/ilm.py,sha256=QUGI9nESYP-_k0RFW1EPyGtNcouwQRm9b7oUhvDcaKE,24090
72
+ elasticsearch/_sync/client/indices.py,sha256=fr-dPEvQfT2YnIir6LUGl7RKBeuVJ4hlars-y74AgoU,220745
73
+ elasticsearch/_sync/client/inference.py,sha256=4UjB1pRq2C0bJanZyHAFjt8UU7ldI9XgAg7TssZNLuQ,12460
74
+ elasticsearch/_sync/client/ingest.py,sha256=QP3rwvi4nZGOzmZYbe-u00Pq3h_78U_tGwZFoc1Fi4o,23943
75
+ elasticsearch/_sync/client/license.py,sha256=-Mq5H0MjmHtSYWZTUl-mGvFwMiuXyp9Rd_pHecfwdMQ,12872
76
+ elasticsearch/_sync/client/logstash.py,sha256=F1m9DxPJRTlgYqIXE8iQmArMCZQZBvNxjsQOYCUKE48,6100
77
+ elasticsearch/_sync/client/migration.py,sha256=wyk2Bp6xYEtDsq3WXZuDPwcHO6pPSPfJt0mRL7Rb0Fo,5295
78
+ elasticsearch/_sync/client/ml.py,sha256=LL_9TH4w9wWx6W_g7E0P3jMDbrizxLf7EjvpFohqv44,257884
79
+ elasticsearch/_sync/client/monitoring.py,sha256=gy9AbNYG9nNWVf4zDg40eybAcv3u8auhIkjC04nYWDI,3806
80
+ elasticsearch/_sync/client/nodes.py,sha256=P6w5nOuyr-Rrilsch3WcPQavm-Bh8nCvdjW_b0M7lEg,24158
81
+ elasticsearch/_sync/client/query_rules.py,sha256=UK3CvOro7WZFzJxlNR3qP5YCgZK3uagefzTQC0tUkc8,16851
82
+ elasticsearch/_sync/client/rollup.py,sha256=-7HAIIfARW5cpKIqIyNSxbmEtJsFg6NJeTu-XX0gGwE,21172
83
+ elasticsearch/_sync/client/search_application.py,sha256=bDzsaK84y7PpbcUkLHuJxfYVtJ-7C8qakTRaGb43VwU,16005
84
+ elasticsearch/_sync/client/searchable_snapshots.py,sha256=Nx8z61FZhUCsM-coj8_LOTNL0cFpfpF9tddGVC07hwA,11740
85
+ elasticsearch/_sync/client/security.py,sha256=EUjQhtayvu0sCZzKASTUnWCCGIHmeY6zXMvP8oUWkBc,161462
86
+ elasticsearch/_sync/client/shutdown.py,sha256=XmHwRxJTaETA7w2kc4i98WcMYGaQU04h-kXhMmgeSK0,11314
87
+ elasticsearch/_sync/client/slm.py,sha256=hMbs-DtrUm8CgzKdseyOhF1f2iPBf_EMaLzinBBWask,16012
88
+ elasticsearch/_sync/client/snapshot.py,sha256=-NPYxpO0-x9VKWhDW8LXbutduCULXKNkAz4eGlVlo1U,40938
89
+ elasticsearch/_sync/client/sql.py,sha256=-2DfSuoIDCLkE4SOKsBVMMqEhEE_HWbnRVzzh_YCgc4,17884
90
+ elasticsearch/_sync/client/ssl.py,sha256=pd6JrsTEHmEqqM8S7txfsiqObdAy-kzY9YBXUHrgl3o,3624
91
+ elasticsearch/_sync/client/synonyms.py,sha256=bVU13E-7CLor7jiYfH6_nZNtcULnO8Rwba7Sr9wad6o,13767
92
+ elasticsearch/_sync/client/tasks.py,sha256=2ncovB_GIgjBJd7sdqtooxKSN8Nkb7ZR3dQ014r7WWA,9279
93
+ elasticsearch/_sync/client/text_structure.py,sha256=N2ZrBw6Lah8zxDsonn9Rd64Oz-IEHlgzAi5Yrkvskxc,12022
94
+ elasticsearch/_sync/client/transform.py,sha256=CVT0GdBGqBBC0dInHKM5VFkUx3UhNzaNiYIjZ5SMHnQ,42410
95
+ elasticsearch/_sync/client/utils.py,sha256=aPAIUrofb5AXK5YLgHNqrc10csWnHMSdPWKQSUd-EwI,18714
96
+ elasticsearch/_sync/client/watcher.py,sha256=dD81SjUmhT_4N9NPTG9PbHCCMwTQu9pXl4VhFUQJE6Q,26350
97
+ elasticsearch/_sync/client/xpack.py,sha256=brTWkWurtXGHprcp-ZB77Sn4p7KQgq4y33kV9oEKYso,4604
98
+ elasticsearch/helpers/__init__.py,sha256=7X10XwdP_fP1QTHGcOxGbCvl2oBevkz_DjhjXCh_59I,1470
99
+ elasticsearch/helpers/actions.py,sha256=rSK-tfpYtgD8x72tm_Lyv_aDnyEZQXDrKNKKZm8VM2k,32372
100
+ elasticsearch/helpers/errors.py,sha256=5khkK4zbXsk4ry8HDmGfyzlmZI9KSKP-MivCgcPoO5U,1506
101
+ elasticsearch/helpers/vectorstore/__init__.py,sha256=znQOANiaSZOJco_dkBf06wpFMKwK0OoDcNkkS8NMWKE,2192
102
+ elasticsearch/helpers/vectorstore/_utils.py,sha256=xJwCFq7sqUBeq143tfnfm3i4e-ta88s85wKZmPZwJWg,3985
103
+ elasticsearch/helpers/vectorstore/_async/__init__.py,sha256=TZps9WjF-TaSNzBvW5wUCgXRcbHnvE_9xAynBHsMtSo,787
104
+ elasticsearch/helpers/vectorstore/_async/_utils.py,sha256=wYlPKvAT4bflJjULLB2LMjJroAgX6tjoDGBPT6V1gj8,1608
105
+ elasticsearch/helpers/vectorstore/_async/embedding_service.py,sha256=Qv4HsPC4k6J00K4ajhJPFlET6fOTV-l74iDCr4dpZgc,3655
106
+ elasticsearch/helpers/vectorstore/_async/strategies.py,sha256=YpmCiz-skq2uvJhUY_nFpX_L6eRlAawZdA2jvGj30Hs,16210
107
+ elasticsearch/helpers/vectorstore/_async/vectorstore.py,sha256=U9xOnjLjJmLeT8dltKWYvsDD4jkmyH0ybfxR0Bn6-_Y,16707
108
+ elasticsearch/helpers/vectorstore/_sync/__init__.py,sha256=TZps9WjF-TaSNzBvW5wUCgXRcbHnvE_9xAynBHsMtSo,787
109
+ elasticsearch/helpers/vectorstore/_sync/_utils.py,sha256=5pdvNS5XC3wqShjliW9Njl9tVuyI9WMy0cxc5-97K-c,1569
110
+ elasticsearch/helpers/vectorstore/_sync/embedding_service.py,sha256=sAw_WKUcmyqOOJRqnNesZCzn7ZyA91v4NvvQszHIWJ8,3582
111
+ elasticsearch/helpers/vectorstore/_sync/strategies.py,sha256=LfB2_uQMnPkWpe67hnPxeS1h5rLodnYOgk64hp9bs-s,16108
112
+ elasticsearch/helpers/vectorstore/_sync/vectorstore.py,sha256=bTWLhdGkdXHS4SojSFHHAuBTUUC3OBdiyDqgQmHC_sI,16510
113
+ elasticsearch-8.16.0.dist-info/METADATA,sha256=_xGsSZiHcAz5xzEfESCk9QDzOhXdApNOfiEqiZKxrJ0,8757
114
+ elasticsearch-8.16.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
115
+ elasticsearch-8.16.0.dist-info/licenses/LICENSE,sha256=XfKg2H1sVi8OoRxoisUlMqoo10TKvHmU_wU39ks7MyA,10143
116
+ elasticsearch-8.16.0.dist-info/licenses/NOTICE,sha256=t4IjKAJ_G-0hYaL4AH16CVS_xDel8UXrJVK6x7JDaGA,61
117
+ elasticsearch-8.16.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.25.0
2
+ Generator: hatchling 1.26.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any