meilisearch-python-sdk 4.0.0__tar.gz → 4.1.1__tar.gz

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.

Potentially problematic release.


This version of meilisearch-python-sdk might be problematic. Click here for more details.

Files changed (103) hide show
  1. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/.github/workflows/docs_publish.yml +1 -0
  2. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/.pre-commit-config.yaml +2 -2
  3. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/PKG-INFO +6 -6
  4. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/README.md +5 -5
  5. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/js/umami.js +1 -1
  6. meilisearch_python_sdk-4.1.1/meilisearch_python_sdk/_batch.py +166 -0
  7. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/_client.py +74 -14
  8. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/_task.py +10 -10
  9. meilisearch_python_sdk-4.1.1/meilisearch_python_sdk/_version.py +1 -0
  10. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/json_handler.py +1 -4
  11. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/models/search.py +1 -1
  12. meilisearch_python_sdk-4.1.1/meilisearch_python_sdk/types.py +16 -0
  13. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/pyproject.toml +7 -7
  14. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_async_client.py +11 -0
  15. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_client.py +11 -0
  16. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/uv.lock +330 -333
  17. meilisearch_python_sdk-4.0.0/meilisearch_python_sdk/_batch.py +0 -52
  18. meilisearch_python_sdk-4.0.0/meilisearch_python_sdk/_version.py +0 -1
  19. meilisearch_python_sdk-4.0.0/meilisearch_python_sdk/types.py +0 -14
  20. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/.github/FUNDING.yml +0 -0
  21. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/.github/release-draft-template.yaml +0 -0
  22. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/.github/renovate.json5 +0 -0
  23. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/.github/workflows/nightly_testing.yml +0 -0
  24. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/.github/workflows/pypi_publish.yml +0 -0
  25. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/.github/workflows/release-drafter.yml +0 -0
  26. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/.github/workflows/testing.yml +0 -0
  27. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/.gitignore +0 -0
  28. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/CONTRIBUTING.md +0 -0
  29. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/LICENSE +0 -0
  30. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/assets/add_in_batches.png +0 -0
  31. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/assets/searches.png +0 -0
  32. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/benchmark/run_benchmark.py +0 -0
  33. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/codecov.yml +0 -0
  34. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/datasets/small_movies.json +0 -0
  35. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docker-compose.https.yml +0 -0
  36. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docker-compose.yml +0 -0
  37. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/.nojekyll +0 -0
  38. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/CNAME +0 -0
  39. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/async_client_api.md +0 -0
  40. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/async_index_api.md +0 -0
  41. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/client_api.md +0 -0
  42. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/css/custom.css +0 -0
  43. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/decorators_api.md +0 -0
  44. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/index.md +0 -0
  45. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/index_api.md +0 -0
  46. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/json_handler.md +0 -0
  47. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/plugins.md +0 -0
  48. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/docs/pydantic.md +0 -0
  49. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/.gitignore +0 -0
  50. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/README.md +0 -0
  51. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/__init__.py +0 -0
  52. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/add_documents_decorator.py +0 -0
  53. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/add_documents_in_batches.py +0 -0
  54. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/async_add_documents_decorator.py +0 -0
  55. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/async_add_documents_in_batches.py +0 -0
  56. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/async_documents_and_search_results.py +0 -0
  57. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/async_search_tracker.py +0 -0
  58. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/async_update_settings.py +0 -0
  59. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/documents_and_search_results.py +0 -0
  60. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/fastapi_example.py +0 -0
  61. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/orjson_example.py +0 -0
  62. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/pyproject.toml +0 -0
  63. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/requirements.txt +0 -0
  64. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/search_tracker.py +0 -0
  65. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/tests/__init__.py +0 -0
  66. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/tests/conftest.py +0 -0
  67. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/tests/test_async_examples.py +0 -0
  68. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/tests/test_examples.py +0 -0
  69. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/ujson_example.py +0 -0
  70. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/examples/update_settings.py +0 -0
  71. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/justfile +0 -0
  72. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/__init__.py +0 -0
  73. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/_http_requests.py +0 -0
  74. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/_utils.py +0 -0
  75. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/decorators.py +0 -0
  76. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/errors.py +0 -0
  77. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/index.py +0 -0
  78. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/models/__init__.py +0 -0
  79. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/models/batch.py +0 -0
  80. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/models/client.py +0 -0
  81. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/models/documents.py +0 -0
  82. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/models/health.py +0 -0
  83. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/models/index.py +0 -0
  84. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/models/settings.py +0 -0
  85. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/models/task.py +0 -0
  86. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/models/version.py +0 -0
  87. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/plugins.py +0 -0
  88. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/meilisearch_python_sdk/py.typed +0 -0
  89. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/mkdocs.yaml +0 -0
  90. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/__init__.py +0 -0
  91. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/conftest.py +0 -0
  92. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_async_documents.py +0 -0
  93. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_async_index.py +0 -0
  94. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_async_index_plugins.py +0 -0
  95. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_async_search.py +0 -0
  96. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_decorators.py +0 -0
  97. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_documents.py +0 -0
  98. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_errors.py +0 -0
  99. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_index.py +0 -0
  100. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_index_plugins.py +0 -0
  101. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_search.py +0 -0
  102. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_utils.py +0 -0
  103. {meilisearch_python_sdk-4.0.0 → meilisearch_python_sdk-4.1.1}/tests/test_version.py +0 -0
@@ -3,6 +3,7 @@ on:
3
3
  release:
4
4
  types:
5
5
  - published
6
+ workflow_dispatch:
6
7
  env:
7
8
  PYTHON_VERSION: "3.12"
8
9
  jobs:
@@ -9,12 +9,12 @@ repos:
9
9
  - id: end-of-file-fixer
10
10
  - id: trailing-whitespace
11
11
  - repo: https://github.com/pre-commit/mirrors-mypy
12
- rev: v1.13.0
12
+ rev: v1.14.1
13
13
  hooks:
14
14
  - id: mypy
15
15
  additional_dependencies: [pydantic, orjson, types-aiofiles, types-ujson]
16
16
  - repo: https://github.com/astral-sh/ruff-pre-commit
17
- rev: v0.8.4
17
+ rev: v0.9.4
18
18
  hooks:
19
19
  - id: ruff
20
20
  args: [--fix, --exit-non-zero-on-fix]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meilisearch-python-sdk
3
- Version: 4.0.0
3
+ Version: 4.1.1
4
4
  Summary: A Python client providing both async and sync support for the Meilisearch API
5
5
  Project-URL: repository, https://github.com/sanders41/meilisearch-python-sdk
6
6
  Project-URL: homepage, https://github.com/sanders41/meilisearch-python-sdk
@@ -57,7 +57,7 @@ Description-Content-Type: text/markdown
57
57
 
58
58
  # Meilisearch Python SDK
59
59
 
60
- [![Tests Status](https://github.com/sanders41/meilisearch-python-sdk/workflows/Testing/badge.svg?branch=main&event=push)](https://github.com/sanders41/meilisearch-python-sdk/actions?query=workflow%3ATesting+branch%3Amain+event%3Apush)
60
+ [![Tests Status](https://github.com/sanders41/meilisearch-python-sdk/actions/workflows/testing.yml/badge.svg?branch=main&event=push)](https://github.com/sanders41/meilisearch-python-sdk/actions?query=workflow%3ATesting+branch%3Amain+event%3Apush)
61
61
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/sanders41/meilisearch-python-sdk/main.svg)](https://results.pre-commit.ci/latest/github/sanders41/meilisearch-python-sdk/main)
62
62
  [![Coverage](https://codecov.io/github/sanders41/meilisearch-python-sdk/coverage.svg?branch=main)](https://codecov.io/gh/sanders41/meilisearch-python-sdk)
63
63
  [![PyPI version](https://badge.fury.io/py/meilisearch-python-sdk.svg)](https://badge.fury.io/py/meilisearch-python-sdk)
@@ -142,15 +142,15 @@ variable, this will be an `UpdateId` object, and use it to check the status of t
142
142
  #### AsyncClient
143
143
 
144
144
  ```py
145
- update = await index.add_documents(documents)
146
- status = await client.index('books').get_update_status(update.update_id)
145
+ task = await index.add_documents([{"id": 1, "title": "test"}])
146
+ status = await client.get_task(task.task_uid)
147
147
  ```
148
148
 
149
149
  #### Client
150
150
 
151
151
  ```py
152
- update = index.add_documents(documents)
153
- status = client.index('books').get_update_status(update.update_id)
152
+ task = index.add_documents([{"id": 1, "title": "test"}])
153
+ status = client.get_task(task.task_uid)
154
154
  ```
155
155
 
156
156
  ### Basic Searching
@@ -1,6 +1,6 @@
1
1
  # Meilisearch Python SDK
2
2
 
3
- [![Tests Status](https://github.com/sanders41/meilisearch-python-sdk/workflows/Testing/badge.svg?branch=main&event=push)](https://github.com/sanders41/meilisearch-python-sdk/actions?query=workflow%3ATesting+branch%3Amain+event%3Apush)
3
+ [![Tests Status](https://github.com/sanders41/meilisearch-python-sdk/actions/workflows/testing.yml/badge.svg?branch=main&event=push)](https://github.com/sanders41/meilisearch-python-sdk/actions?query=workflow%3ATesting+branch%3Amain+event%3Apush)
4
4
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/sanders41/meilisearch-python-sdk/main.svg)](https://results.pre-commit.ci/latest/github/sanders41/meilisearch-python-sdk/main)
5
5
  [![Coverage](https://codecov.io/github/sanders41/meilisearch-python-sdk/coverage.svg?branch=main)](https://codecov.io/gh/sanders41/meilisearch-python-sdk)
6
6
  [![PyPI version](https://badge.fury.io/py/meilisearch-python-sdk.svg)](https://badge.fury.io/py/meilisearch-python-sdk)
@@ -85,15 +85,15 @@ variable, this will be an `UpdateId` object, and use it to check the status of t
85
85
  #### AsyncClient
86
86
 
87
87
  ```py
88
- update = await index.add_documents(documents)
89
- status = await client.index('books').get_update_status(update.update_id)
88
+ task = await index.add_documents([{"id": 1, "title": "test"}])
89
+ status = await client.get_task(task.task_uid)
90
90
  ```
91
91
 
92
92
  #### Client
93
93
 
94
94
  ```py
95
- update = index.add_documents(documents)
96
- status = client.index('books').get_update_status(update.update_id)
95
+ task = index.add_documents([{"id": 1, "title": "test"}])
96
+ status = client.get_task(task.task_uid)
97
97
  ```
98
98
 
99
99
  ### Basic Searching
@@ -1,7 +1,7 @@
1
1
  document.addEventListener("DOMContentLoaded", function () {
2
2
  var umamiScript = document.createElement("script");
3
3
  umamiScript.defer = true;
4
- umamiScript.src = "https://analytics.us.umami.is/script.js";
4
+ umamiScript.src = "https://cloud.umami.is/script.js";
5
5
  umamiScript.dataset.websiteId = "29a9d193-92a3-44d0-9b1d-16ddd23898fb";
6
6
  document.head.appendChild(umamiScript);
7
7
  });
@@ -0,0 +1,166 @@
1
+ from __future__ import annotations
2
+
3
+ from datetime import datetime
4
+ from typing import TYPE_CHECKING
5
+
6
+ from meilisearch_python_sdk._utils import get_async_client, get_client
7
+ from meilisearch_python_sdk.errors import BatchNotFoundError
8
+ from meilisearch_python_sdk.models.batch import BatchResult, BatchStatus
9
+
10
+ if TYPE_CHECKING:
11
+ from httpx import AsyncClient as HttpxAsyncClient # pragma: no cover
12
+ from httpx import Client as HttpxClient # pragma: no cover
13
+
14
+ from meilisearch_python_sdk._client import ( # pragma: no cover
15
+ AsyncClient,
16
+ Client,
17
+ )
18
+
19
+
20
+ async def async_get_batch(
21
+ client: HttpxAsyncClient | AsyncClient, batch_uid: int
22
+ ) -> BatchResult | None:
23
+ client_ = get_async_client(client)
24
+ response = await client_.get(f"batches/{batch_uid}")
25
+
26
+ if response.status_code == 404:
27
+ raise BatchNotFoundError(f"Batch {batch_uid} not found")
28
+
29
+ return BatchResult(**response.json())
30
+
31
+
32
+ async def async_get_batches(
33
+ client: HttpxAsyncClient | AsyncClient,
34
+ *,
35
+ uids: list[int] | None = None,
36
+ batch_uids: list[int] | None = None,
37
+ index_uids: list[int] | None = None,
38
+ statuses: list[str] | None = None,
39
+ types: list[str] | None = None,
40
+ limit: int = 20,
41
+ from_: str | None = None,
42
+ reverse: bool = False,
43
+ before_enqueued_at: datetime | None = None,
44
+ after_enqueued_at: datetime | None = None,
45
+ before_started_at: datetime | None = None,
46
+ after_finished_at: datetime | None = None,
47
+ ) -> BatchStatus:
48
+ client_ = get_async_client(client)
49
+ params = _build_parameters(
50
+ uids=uids,
51
+ batch_uids=batch_uids,
52
+ index_uids=index_uids,
53
+ statuses=statuses,
54
+ types=types,
55
+ limit=limit,
56
+ from_=from_,
57
+ reverse=reverse,
58
+ before_enqueued_at=before_enqueued_at,
59
+ after_enqueued_at=after_enqueued_at,
60
+ before_started_at=before_started_at,
61
+ after_finished_at=after_finished_at,
62
+ )
63
+ response = await client_.get("batches", params=params)
64
+
65
+ return BatchStatus(**response.json())
66
+
67
+
68
+ def get_batch(client: HttpxClient | Client, batch_uid: int) -> BatchResult | None:
69
+ client_ = get_client(client)
70
+ response = client_.get(f"batches/{batch_uid}")
71
+
72
+ if response.status_code == 404:
73
+ raise BatchNotFoundError(f"Batch {batch_uid} not found")
74
+
75
+ return BatchResult(**response.json())
76
+
77
+
78
+ def get_batches(
79
+ client: HttpxClient | Client,
80
+ *,
81
+ uids: list[int] | None = None,
82
+ batch_uids: list[int] | None = None,
83
+ index_uids: list[int] | None = None,
84
+ statuses: list[str] | None = None,
85
+ types: list[str] | None = None,
86
+ limit: int = 20,
87
+ from_: str | None = None,
88
+ reverse: bool = False,
89
+ before_enqueued_at: datetime | None = None,
90
+ after_enqueued_at: datetime | None = None,
91
+ before_started_at: datetime | None = None,
92
+ after_finished_at: datetime | None = None,
93
+ ) -> BatchStatus:
94
+ client_ = get_client(client)
95
+ params = _build_parameters(
96
+ uids=uids,
97
+ batch_uids=batch_uids,
98
+ index_uids=index_uids,
99
+ statuses=statuses,
100
+ types=types,
101
+ limit=limit,
102
+ from_=from_,
103
+ reverse=reverse,
104
+ before_enqueued_at=before_enqueued_at,
105
+ after_enqueued_at=after_enqueued_at,
106
+ before_started_at=before_started_at,
107
+ after_finished_at=after_finished_at,
108
+ )
109
+
110
+ response = client_.get("batches", params=params)
111
+
112
+ return BatchStatus(**response.json())
113
+
114
+
115
+ def _build_parameters(
116
+ *,
117
+ uids: list[int] | None = None,
118
+ batch_uids: list[int] | None = None,
119
+ index_uids: list[int] | None = None,
120
+ statuses: list[str] | None = None,
121
+ types: list[str] | None = None,
122
+ limit: int = 20,
123
+ from_: str | None = None,
124
+ reverse: bool = False,
125
+ before_enqueued_at: datetime | None = None,
126
+ after_enqueued_at: datetime | None = None,
127
+ before_started_at: datetime | None = None,
128
+ after_finished_at: datetime | None = None,
129
+ ) -> dict[str, str]:
130
+ params = {}
131
+
132
+ if uids:
133
+ params["uids"] = ",".join([str(uid) for uid in uids])
134
+
135
+ if batch_uids: # pragma: no cover
136
+ params["batchUids"] = ",".join([str(uid) for uid in batch_uids])
137
+
138
+ if index_uids: # pragma: no cover
139
+ params["indexUids"] = ",".join([str(uid) for uid in index_uids])
140
+
141
+ if statuses: # pragma: no cover
142
+ params["statuses"] = ",".join(statuses)
143
+
144
+ if types: # pragma: no cover
145
+ params["types"] = ",".join(types)
146
+
147
+ params["limit"] = str(limit)
148
+
149
+ if from_: # pragma: no cover
150
+ params["from"] = from_
151
+
152
+ params["reverse"] = "true" if reverse else "false"
153
+
154
+ if before_enqueued_at: # pragma: no cover
155
+ params["beforeEnqueuedAt"] = before_enqueued_at.isoformat()
156
+
157
+ if after_enqueued_at: # pragma: no cover
158
+ params["afterEnqueuedAt"] = after_enqueued_at.isoformat()
159
+
160
+ if before_started_at: # pragma: no cover
161
+ params["beforeStartedAt"] = before_started_at.isoformat()
162
+
163
+ if after_finished_at: # pragma: no cover
164
+ params["afterFinishedAt"] = after_finished_at.isoformat()
165
+
166
+ return params
@@ -9,7 +9,9 @@ from httpx import AsyncClient as HttpxAsyncClient
9
9
  from httpx import Client as HttpxClient
10
10
 
11
11
  from meilisearch_python_sdk import _task
12
- from meilisearch_python_sdk._batch import async_get_batch, async_get_batches, get_batch, get_batches
12
+ from meilisearch_python_sdk._batch import async_get_batch, async_get_batches
13
+ from meilisearch_python_sdk._batch import get_batch as _get_batch
14
+ from meilisearch_python_sdk._batch import get_batches as _get_batches
13
15
  from meilisearch_python_sdk._http_requests import AsyncHttpRequests, HttpRequests
14
16
  from meilisearch_python_sdk.errors import InvalidRestriction, MeilisearchApiError
15
17
  from meilisearch_python_sdk.index import AsyncIndex, Index
@@ -775,14 +777,43 @@ class AsyncClient(BaseClient):
775
777
  async def get_batch(self, batch_uid: int) -> BatchResult | None:
776
778
  return await async_get_batch(self, batch_uid)
777
779
 
778
- async def get_batches(self) -> BatchStatus:
779
- return await async_get_batches(self)
780
+ async def get_batches(
781
+ self,
782
+ *,
783
+ uids: list[int] | None = None,
784
+ batch_uids: list[int] | None = None,
785
+ index_uids: list[int] | None = None,
786
+ statuses: list[str] | None = None,
787
+ types: list[str] | None = None,
788
+ limit: int = 20,
789
+ from_: str | None = None,
790
+ reverse: bool = False,
791
+ before_enqueued_at: datetime | None = None,
792
+ after_enqueued_at: datetime | None = None,
793
+ before_started_at: datetime | None = None,
794
+ after_finished_at: datetime | None = None,
795
+ ) -> BatchStatus:
796
+ return await async_get_batches(
797
+ self,
798
+ uids=uids,
799
+ batch_uids=batch_uids,
800
+ index_uids=index_uids,
801
+ statuses=statuses,
802
+ types=types,
803
+ limit=limit,
804
+ from_=from_,
805
+ reverse=reverse,
806
+ before_enqueued_at=before_enqueued_at,
807
+ after_enqueued_at=after_enqueued_at,
808
+ before_started_at=before_started_at,
809
+ after_finished_at=after_finished_at,
810
+ )
780
811
 
781
812
  async def cancel_tasks(
782
813
  self,
783
814
  *,
784
- uids: list[str] | None = None,
785
- index_uids: list[str] | None = None,
815
+ uids: list[int] | None = None,
816
+ index_uids: list[int] | None = None,
786
817
  statuses: list[str] | None = None,
787
818
  types: list[str] | None = None,
788
819
  before_enqueued_at: datetime | None = None,
@@ -856,8 +887,8 @@ class AsyncClient(BaseClient):
856
887
  async def delete_tasks(
857
888
  self,
858
889
  *,
859
- uids: list[str] | None = None,
860
- index_uids: list[str] | None = None,
890
+ uids: list[int] | None = None,
891
+ index_uids: list[int] | None = None,
861
892
  statuses: list[str] | None = None,
862
893
  types: list[str] | None = None,
863
894
  before_enqueued_at: datetime | None = None,
@@ -1599,16 +1630,45 @@ class Client(BaseClient):
1599
1630
  return TaskInfo(**response.json())
1600
1631
 
1601
1632
  def get_batch(self, batch_uid: int) -> BatchResult | None:
1602
- return get_batch(self, batch_uid)
1633
+ return _get_batch(self, batch_uid)
1603
1634
 
1604
- def get_batches(self) -> BatchStatus:
1605
- return get_batches(self)
1635
+ def get_batches(
1636
+ self,
1637
+ *,
1638
+ uids: list[int] | None = None,
1639
+ batch_uids: list[int] | None = None,
1640
+ index_uids: list[int] | None = None,
1641
+ statuses: list[str] | None = None,
1642
+ types: list[str] | None = None,
1643
+ limit: int = 20,
1644
+ from_: str | None = None,
1645
+ reverse: bool = False,
1646
+ before_enqueued_at: datetime | None = None,
1647
+ after_enqueued_at: datetime | None = None,
1648
+ before_started_at: datetime | None = None,
1649
+ after_finished_at: datetime | None = None,
1650
+ ) -> BatchStatus:
1651
+ return _get_batches(
1652
+ self,
1653
+ uids=uids,
1654
+ batch_uids=batch_uids,
1655
+ index_uids=index_uids,
1656
+ statuses=statuses,
1657
+ types=types,
1658
+ limit=limit,
1659
+ from_=from_,
1660
+ reverse=reverse,
1661
+ before_enqueued_at=before_enqueued_at,
1662
+ after_enqueued_at=after_enqueued_at,
1663
+ before_started_at=before_started_at,
1664
+ after_finished_at=after_finished_at,
1665
+ )
1606
1666
 
1607
1667
  def cancel_tasks(
1608
1668
  self,
1609
1669
  *,
1610
- uids: list[str] | None = None,
1611
- index_uids: list[str] | None = None,
1670
+ uids: list[int] | None = None,
1671
+ index_uids: list[int] | None = None,
1612
1672
  statuses: list[str] | None = None,
1613
1673
  types: list[str] | None = None,
1614
1674
  before_enqueued_at: datetime | None = None,
@@ -1660,8 +1720,8 @@ class Client(BaseClient):
1660
1720
  def delete_tasks(
1661
1721
  self,
1662
1722
  *,
1663
- uids: list[str] | None = None,
1664
- index_uids: list[str] | None = None,
1723
+ uids: list[int] | None = None,
1724
+ index_uids: list[int] | None = None,
1665
1725
  statuses: list[str] | None = None,
1666
1726
  types: list[str] | None = None,
1667
1727
  before_enqueued_at: datetime | None = None,
@@ -22,8 +22,8 @@ if TYPE_CHECKING:
22
22
  async def async_cancel_tasks(
23
23
  client: HttpxAsyncClient | AsyncClient,
24
24
  *,
25
- uids: list[str] | None = None,
26
- index_uids: list[str] | None = None,
25
+ uids: list[int] | None = None,
26
+ index_uids: list[int] | None = None,
27
27
  statuses: list[str] | None = None,
28
28
  types: list[str] | None = None,
29
29
  before_enqueued_at: datetime | None = None,
@@ -86,8 +86,8 @@ async def async_cancel_tasks(
86
86
  async def async_delete_tasks(
87
87
  client: HttpxAsyncClient | AsyncClient,
88
88
  *,
89
- uids: list[str] | None = None,
90
- index_uids: list[str] | None = None,
89
+ uids: list[int] | None = None,
90
+ index_uids: list[int] | None = None,
91
91
  statuses: list[str] | None = None,
92
92
  types: list[str] | None = None,
93
93
  before_enqueued_at: datetime | None = None,
@@ -193,8 +193,8 @@ async def async_wait_for_task(
193
193
  def cancel_tasks(
194
194
  client: HttpxClient | Client,
195
195
  *,
196
- uids: list[str] | None = None,
197
- index_uids: list[str] | None = None,
196
+ uids: list[int] | None = None,
197
+ index_uids: list[int] | None = None,
198
198
  statuses: list[str] | None = None,
199
199
  types: list[str] | None = None,
200
200
  before_enqueued_at: datetime | None = None,
@@ -227,8 +227,8 @@ def cancel_tasks(
227
227
  def delete_tasks(
228
228
  client: HttpxClient | Client,
229
229
  *,
230
- uids: list[str] | None = None,
231
- index_uids: list[str] | None = None,
230
+ uids: list[int] | None = None,
231
+ index_uids: list[int] | None = None,
232
232
  statuses: list[str] | None = None,
233
233
  types: list[str] | None = None,
234
234
  before_enqueued_at: datetime | None = None,
@@ -338,8 +338,8 @@ def _get_json_handler(
338
338
 
339
339
 
340
340
  def _process_params(
341
- uids: list[str] | None = None,
342
- index_uids: list[str] | None = None,
341
+ uids: list[int] | None = None,
342
+ index_uids: list[int] | None = None,
343
343
  statuses: list[str] | None = None,
344
344
  types: list[str] | None = None,
345
345
  before_enqueued_at: datetime | None = None,
@@ -0,0 +1 @@
1
+ VERSION = "4.1.1"
@@ -2,10 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import json
4
4
  from abc import ABC, abstractmethod
5
- from typing import TYPE_CHECKING, Any
6
-
7
- if TYPE_CHECKING: # pragma: no cover
8
- pass
5
+ from typing import Any
9
6
 
10
7
  try:
11
8
  import orjson
@@ -18,7 +18,7 @@ class FacetHits(CamelBase):
18
18
 
19
19
  class FacetSearchResults(CamelBase):
20
20
  facet_hits: list[FacetHits]
21
- facet_query: str
21
+ facet_query: str | None
22
22
  processing_time_ms: int
23
23
 
24
24
 
@@ -0,0 +1,16 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import MutableMapping
4
+ from typing import TYPE_CHECKING, Any, Union
5
+
6
+ if TYPE_CHECKING: # pragma: no cover
7
+ import sys
8
+
9
+ if sys.version_info >= (3, 10):
10
+ from typing import TypeAlias
11
+ else:
12
+ from typing_extensions import TypeAlias
13
+
14
+ Filter: TypeAlias = Union[str, list[Union[str, list[str]]]]
15
+ JsonDict: TypeAlias = dict[str, Any]
16
+ JsonMapping: TypeAlias = MutableMapping[str, Any]
@@ -41,19 +41,19 @@ all = ["orjson", "ujson"]
41
41
  [dependency-groups]
42
42
  dev = [
43
43
  "mkdocs==1.6.1",
44
- "mkdocs-material==9.5.49",
45
- "mkdocstrings[python]==0.27.0",
46
- "mypy[faster-cache]==1.14.0",
47
- "pre-commit==4.0.1",
44
+ "mkdocs-material==9.6.3",
45
+ "mkdocstrings[python]==0.28.0",
46
+ "mypy[faster-cache]==1.15.0",
47
+ "pre-commit==4.1.0",
48
48
  "pytest==8.3.4",
49
49
  "pytest-cov==6.0.0",
50
- "pytest-asyncio==0.25.0",
50
+ "pytest-asyncio==0.25.3",
51
51
  "pytest-xdist==3.6.1",
52
- "ruff==0.8.4",
52
+ "ruff==0.9.5",
53
53
  "types-aiofiles==24.1.0.20241221",
54
54
  "typing-extensions==4.12.2",
55
55
  "types-ujson==5.10.0.20240515",
56
- "meilisearch==0.33.0",
56
+ "meilisearch==0.33.1",
57
57
  "rich==13.9.4",
58
58
  ]
59
59
 
@@ -1021,6 +1021,17 @@ async def test_get_batches(async_client, async_empty_index, small_movies):
1021
1021
  assert len(result.results) > 0
1022
1022
 
1023
1023
 
1024
+ async def test_get_batches_with_params(async_client, async_empty_index, small_movies):
1025
+ # Add documents to create batches
1026
+ index = await async_empty_index()
1027
+ tasks = await index.add_documents_in_batches(small_movies, batch_size=5)
1028
+ waits = [async_client.wait_for_task(x.task_uid) for x in tasks]
1029
+ await asyncio.gather(*waits)
1030
+
1031
+ result = await async_client.get_batches(uids=[task.task_uid for task in tasks])
1032
+ assert len(result.results) > 0
1033
+
1034
+
1024
1035
  async def test_get_batch(async_client, async_empty_index, small_movies):
1025
1036
  # Add documents to create batches
1026
1037
  index = await async_empty_index()
@@ -1002,6 +1002,17 @@ def test_get_batches(client, empty_index, small_movies):
1002
1002
  assert len(result.results) > 0
1003
1003
 
1004
1004
 
1005
+ def test_get_batches_with_params(client, empty_index, small_movies):
1006
+ # Add documents to create batches
1007
+ index = empty_index()
1008
+ tasks = index.add_documents_in_batches(small_movies, batch_size=5)
1009
+ for task in tasks:
1010
+ client.wait_for_task(task.task_uid)
1011
+
1012
+ result = client.get_batches(uids=[task.task_uid for task in tasks])
1013
+ assert len(result.results) > 0
1014
+
1015
+
1005
1016
  def test_get_batch(client, empty_index, small_movies):
1006
1017
  # Add documents to create batches
1007
1018
  index = empty_index()