meilisearch-python-sdk 8.0.1__tar.gz → 8.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.
Files changed (118) hide show
  1. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/.github/workflows/docs_publish.yml +1 -1
  2. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/.github/workflows/nightly_testing.yml +1 -1
  3. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/.github/workflows/prek_update.yml +2 -2
  4. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/.github/workflows/pypi_publish.yml +1 -1
  5. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/.github/workflows/testing.yml +8 -8
  6. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/PKG-INFO +1 -1
  7. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docker-compose.https.yml +1 -1
  8. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docker-compose.yml +1 -1
  9. meilisearch_python_sdk-8.1.1/meilisearch_python_sdk/_version.py +1 -0
  10. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/decorators.py +15 -12
  11. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/index/_common.py +3 -3
  12. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/json_handler.py +7 -13
  13. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/settings.py +2 -2
  14. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/prek.toml +3 -3
  15. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/pyproject.toml +7 -7
  16. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_async_documents.py +1 -1
  17. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_documents.py +1 -1
  18. meilisearch_python_sdk-8.1.1/tests/test_json_handler.py +36 -0
  19. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/uv.lock +424 -384
  20. meilisearch_python_sdk-8.0.1/meilisearch_python_sdk/_version.py +0 -1
  21. meilisearch_python_sdk-8.0.1/tests/test_json_handler.py +0 -13
  22. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/.github/FUNDING.yml +0 -0
  23. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/.github/release-draft-template.yaml +0 -0
  24. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/.github/renovate.json5 +0 -0
  25. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/.github/workflows/release-drafter.yml +0 -0
  26. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/.gitignore +0 -0
  27. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/CONTRIBUTING.md +0 -0
  28. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/LICENSE +0 -0
  29. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/README.md +0 -0
  30. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/assets/add_in_batches.png +0 -0
  31. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/assets/searches.png +0 -0
  32. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/datasets/small_movies.json +0 -0
  33. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/.nojekyll +0 -0
  34. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/CNAME +0 -0
  35. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/async_client_api.md +0 -0
  36. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/async_index_api.md +0 -0
  37. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/client_api.md +0 -0
  38. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/css/custom.css +0 -0
  39. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/decorators_api.md +0 -0
  40. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/errors_api.md +0 -0
  41. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/index.md +0 -0
  42. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/index_api.md +0 -0
  43. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/js/umami.js +0 -0
  44. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/json_handler.md +0 -0
  45. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/models_client.md +0 -0
  46. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/models_index.md +0 -0
  47. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/models_search.md +0 -0
  48. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/models_settings.md +0 -0
  49. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/models_task.md +0 -0
  50. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/overrides/partials/footer.html +0 -0
  51. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/plugins.md +0 -0
  52. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/docs/pydantic.md +0 -0
  53. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/.gitignore +0 -0
  54. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/README.md +0 -0
  55. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/__init__.py +0 -0
  56. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/add_documents_decorator.py +0 -0
  57. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/add_documents_in_batches.py +0 -0
  58. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/async_add_documents_decorator.py +0 -0
  59. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/async_add_documents_in_batches.py +0 -0
  60. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/async_documents_and_search_results.py +0 -0
  61. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/async_search_tracker.py +0 -0
  62. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/async_update_settings.py +0 -0
  63. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/documents_and_search_results.py +0 -0
  64. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/fastapi_example.py +0 -0
  65. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/orjson_example.py +0 -0
  66. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/pyproject.toml +0 -0
  67. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/requirements.txt +0 -0
  68. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/search_tracker.py +0 -0
  69. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/tests/__init__.py +0 -0
  70. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/tests/conftest.py +0 -0
  71. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/tests/test_async_examples.py +0 -0
  72. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/tests/test_examples.py +0 -0
  73. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/examples/update_settings.py +0 -0
  74. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/justfile +0 -0
  75. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/__init__.py +0 -0
  76. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/_batch.py +0 -0
  77. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/_client/__init__.py +0 -0
  78. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/_client/_async_client.py +0 -0
  79. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/_client/_base_client.py +0 -0
  80. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/_client/_client.py +0 -0
  81. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/_client/_common.py +0 -0
  82. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/_http_requests.py +0 -0
  83. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/_task.py +0 -0
  84. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/_utils.py +0 -0
  85. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/errors.py +0 -0
  86. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/index/__init__.py +0 -0
  87. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/index/async_index.py +0 -0
  88. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/index/index.py +0 -0
  89. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/__init__.py +0 -0
  90. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/batch.py +0 -0
  91. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/client.py +0 -0
  92. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/documents.py +0 -0
  93. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/health.py +0 -0
  94. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/index.py +0 -0
  95. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/search.py +0 -0
  96. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/task.py +0 -0
  97. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/version.py +0 -0
  98. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/models/webhook.py +0 -0
  99. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/plugins.py +0 -0
  100. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/py.typed +0 -0
  101. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/meilisearch_python_sdk/types.py +0 -0
  102. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/mkdocs.yaml +0 -0
  103. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/__init__.py +0 -0
  104. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/conftest.py +0 -0
  105. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_async_client.py +0 -0
  106. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_async_index.py +0 -0
  107. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_async_index_plugins.py +0 -0
  108. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_async_search.py +0 -0
  109. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_client.py +0 -0
  110. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_decorators.py +0 -0
  111. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_errors.py +0 -0
  112. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_http_requests.py +0 -0
  113. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_index.py +0 -0
  114. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_index_plugins.py +0 -0
  115. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_search.py +0 -0
  116. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_settings_models.py +0 -0
  117. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_utils.py +0 -0
  118. {meilisearch_python_sdk-8.0.1 → meilisearch_python_sdk-8.1.1}/tests/test_version.py +0 -0
@@ -16,7 +16,7 @@ jobs:
16
16
  steps:
17
17
  - uses: actions/checkout@v7
18
18
  - name: Install uv
19
- uses: astral-sh/setup-uv@v10.3.0
19
+ uses: astral-sh/setup-uv@v10.3.3
20
20
  with:
21
21
  enable-cache: true
22
22
  - name: Set up Python
@@ -14,7 +14,7 @@ jobs:
14
14
  steps:
15
15
  - uses: actions/checkout@v7
16
16
  - name: Install uv
17
- uses: astral-sh/setup-uv@v10.3.0
17
+ uses: astral-sh/setup-uv@v10.3.3
18
18
  with:
19
19
  enable-cache: true
20
20
  - name: install Just
@@ -13,13 +13,13 @@ jobs:
13
13
  steps:
14
14
  - uses: actions/checkout@v7
15
15
  - name: Install uv
16
- uses: astral-sh/setup-uv@v10.3.0
16
+ uses: astral-sh/setup-uv@v10.3.3
17
17
  with:
18
18
  enable-cache: true
19
19
  - name: Set up Python
20
20
  uses: actions/setup-python@v7
21
21
  with:
22
- python-version: 3.14
22
+ python-version: 3.15
23
23
  - name: Run Update
24
24
  run: uv run prek autoupdate
25
25
  - name: Create Pull Request
@@ -14,7 +14,7 @@ jobs:
14
14
  steps:
15
15
  - uses: actions/checkout@v7
16
16
  - name: Install uv
17
- uses: astral-sh/setup-uv@v10.3.0
17
+ uses: astral-sh/setup-uv@v10.3.3
18
18
  with:
19
19
  enable-cache: true
20
20
  - name: Set up Python
@@ -15,7 +15,7 @@ jobs:
15
15
  - name: install Just
16
16
  uses: taiki-e/install-action@just
17
17
  - name: Install uv
18
- uses: astral-sh/setup-uv@v10.3.0
18
+ uses: astral-sh/setup-uv@v10.3.3
19
19
  with:
20
20
  enable-cache: true
21
21
  - name: Set up Python
@@ -31,7 +31,7 @@ jobs:
31
31
  runs-on: ubuntu-latest
32
32
  steps:
33
33
  - uses: actions/checkout@v7
34
- - uses: j178/prek-action@v3.0.1
34
+ - uses: j178/prek-action@v3.1.0
35
35
  env:
36
36
  PREK_SKIP: no-commit-to-branch,pyrefly-check
37
37
  parallel-testing:
@@ -45,7 +45,7 @@ jobs:
45
45
  - name: install Just
46
46
  uses: taiki-e/install-action@just
47
47
  - name: Install uv
48
- uses: astral-sh/setup-uv@v10.3.0
48
+ uses: astral-sh/setup-uv@v10.3.3
49
49
  with:
50
50
  enable-cache: true
51
51
  - name: Set up Python ${{ matrix.python-version }}
@@ -74,7 +74,7 @@ jobs:
74
74
  - name: install Just
75
75
  uses: taiki-e/install-action@just
76
76
  - name: Install uv
77
- uses: astral-sh/setup-uv@v10.3.0
77
+ uses: astral-sh/setup-uv@v10.3.3
78
78
  with:
79
79
  enable-cache: true
80
80
  - name: Set up Python ${{ matrix.python-version }}
@@ -114,7 +114,7 @@ jobs:
114
114
  - name: install Just
115
115
  uses: taiki-e/install-action@just
116
116
  - name: Install uv
117
- uses: astral-sh/setup-uv@v10.3.0
117
+ uses: astral-sh/setup-uv@v10.3.3
118
118
  with:
119
119
  enable-cache: true
120
120
  - name: Set up Python ${{ matrix.python-version }}
@@ -143,7 +143,7 @@ jobs:
143
143
  - name: install Just
144
144
  uses: taiki-e/install-action@just
145
145
  - name: Install uv
146
- uses: astral-sh/setup-uv@v10.3.0
146
+ uses: astral-sh/setup-uv@v10.3.3
147
147
  with:
148
148
  enable-cache: true
149
149
  - name: Set up Python ${{ matrix.python-version }}
@@ -197,13 +197,13 @@ jobs:
197
197
  - name: install Just
198
198
  uses: taiki-e/install-action@just
199
199
  - name: Install uv
200
- uses: astral-sh/setup-uv@v10.3.0
200
+ uses: astral-sh/setup-uv@v10.3.3
201
201
  with:
202
202
  enable-cache: true
203
203
  - name: Set up Python
204
204
  uses: actions/setup-python@v7
205
205
  with:
206
- python-version: "3.14"
206
+ python-version: "3.15"
207
207
  - name: Install Dependencies
208
208
  run: just install
209
209
  - name: Test Docs Build
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: meilisearch-python-sdk
3
- Version: 8.0.1
3
+ Version: 8.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
@@ -1,6 +1,6 @@
1
1
  services:
2
2
  meilisearch:
3
- image: getmeili/meilisearch:v1.54.3
3
+ image: getmeili/meilisearch:v1.56.0
4
4
  ports:
5
5
  - "7700:7700"
6
6
  environment:
@@ -1,6 +1,6 @@
1
1
  services:
2
2
  meilisearch:
3
- image: getmeili/meilisearch:v1.54.3
3
+ image: getmeili/meilisearch:v1.56.0
4
4
  ports:
5
5
  - "7700:7700"
6
6
  environment:
@@ -0,0 +1 @@
1
+ VERSION = "8.1.1"
@@ -170,17 +170,17 @@ def add_documents(
170
170
  )
171
171
  return result
172
172
 
173
- decorator_client = Client(
173
+ with Client(
174
174
  url=connection_info.url, api_key=connection_info.api_key, verify=verify
175
- )
176
- _add_documents(
177
- decorator_client,
178
- index_name,
179
- result,
180
- batch_size,
181
- primary_key,
182
- wait_for_task,
183
- )
175
+ ) as client:
176
+ _add_documents(
177
+ client,
178
+ index_name,
179
+ result,
180
+ batch_size,
181
+ primary_key,
182
+ wait_for_task,
183
+ )
184
184
 
185
185
  return result
186
186
 
@@ -210,7 +210,10 @@ async def _async_add_documents(
210
210
 
211
211
  if wait_for_task:
212
212
  async with asyncio.TaskGroup() as tg: # type: ignore[attr-defined]
213
- [tg.create_task(async_client.wait_for_task(x.task_uid)) for x in tasks]
213
+ [
214
+ tg.create_task(async_client.wait_for_task(x.task_uid, timeout_in_ms=None))
215
+ for x in tasks
216
+ ]
214
217
 
215
218
 
216
219
  def _add_documents(
@@ -234,4 +237,4 @@ def _add_documents(
234
237
 
235
238
  if wait_for_task:
236
239
  for task in tasks:
237
- client.wait_for_task(task.task_uid)
240
+ client.wait_for_task(task.task_uid, timeout_in_ms=None)
@@ -206,7 +206,7 @@ def process_search_parameters(
206
206
  body["retrieveVectors"] = retrieve_vectors
207
207
 
208
208
  if exhaustive_facet_count is not None:
209
- body["exhaustivefacetCount"] = exhaustive_facet_count
209
+ body["exhaustiveFacetCount"] = exhaustive_facet_count
210
210
 
211
211
  if media is not None:
212
212
  body["media"] = media
@@ -252,7 +252,7 @@ def embedder_json_to_embedders_model( # pragma: no cover
252
252
  embedders[k] = OllamaEmbedder(**v)
253
253
  elif v.get("source") == "rest":
254
254
  embedders[k] = RestEmbedder(**v)
255
- elif v.get("source") == "composit":
255
+ elif v.get("source") == "composite":
256
256
  embedders[k] = CompositeEmbedder(**v)
257
257
  else:
258
258
  embedders[k] = UserProvidedEmbedder(**v)
@@ -297,7 +297,7 @@ def embedder_json_to_settings_model( # pragma: no cover
297
297
  embedders[k] = OllamaEmbedder(**v)
298
298
  elif v.get("source") == "rest":
299
299
  embedders[k] = RestEmbedder(**v)
300
- elif v.get("source") == "composit":
300
+ elif v.get("source") == "composite":
301
301
  embedders[k] = CompositeEmbedder(**v)
302
302
  else:
303
303
  embedders[k] = UserProvidedEmbedder(**v)
@@ -11,13 +11,11 @@ except ImportError: # pragma: no cover
11
11
 
12
12
 
13
13
  class _JsonHandler(ABC):
14
- @staticmethod
15
14
  @abstractmethod
16
- def dumps(obj: Any) -> str: ... # noqa: ANN401
15
+ def dumps(self, obj: Any) -> str: ... # noqa: ANN401
17
16
 
18
- @staticmethod
19
17
  @abstractmethod
20
- def dump_bytes(obj: Any) -> bytes: ... # noqa: ANN401
18
+ def dump_bytes(self, obj: Any) -> bytes: ... # noqa: ANN401
21
19
 
22
20
  @staticmethod
23
21
  @abstractmethod
@@ -25,8 +23,6 @@ class _JsonHandler(ABC):
25
23
 
26
24
 
27
25
  class BuiltinHandler(_JsonHandler):
28
- serializer: type[json.JSONEncoder] | None = None
29
-
30
26
  def __init__(self, serializer: type[json.JSONEncoder] | None = None) -> None:
31
27
  """Uses the json module from the Python standard library.
32
28
 
@@ -34,15 +30,13 @@ class BuiltinHandler(_JsonHandler):
34
30
  serializer: A custom JSONEncode to handle serializing fields that the build in
35
31
  json.dumps cannot handle, for example UUID and datetime. Defaults to None.
36
32
  """
37
- BuiltinHandler.serializer = serializer
33
+ self.serializer = serializer
38
34
 
39
- @staticmethod
40
- def dumps(obj: Any) -> str: # noqa: ANN401
41
- return json.dumps(obj, cls=BuiltinHandler.serializer)
35
+ def dumps(self, obj: Any) -> str: # noqa: ANN401
36
+ return json.dumps(obj, cls=self.serializer)
42
37
 
43
- @staticmethod
44
- def dump_bytes(obj: Any) -> bytes: # noqa: ANN401
45
- return json.dumps(obj, cls=BuiltinHandler.serializer).encode("utf-8")
38
+ def dump_bytes(self, obj: Any) -> bytes: # noqa: ANN401
39
+ return json.dumps(obj, cls=self.serializer).encode("utf-8")
46
40
 
47
41
  @staticmethod
48
42
  def loads(json_string: str | bytes | bytearray) -> Any: # noqa: ANN401
@@ -33,8 +33,8 @@ class Faceting(CamelBase):
33
33
  return None
34
34
 
35
35
  for _, value in v.items():
36
- if value not in ("alpha", "count"):
37
- raise ValueError('facet_order must be either "alpha" or "count"')
36
+ if value not in ("alpha", "count", "sampledCount"):
37
+ raise ValueError('facet_order must be either "alpha", "count", "sampledCount"')
38
38
 
39
39
  return v
40
40
 
@@ -21,7 +21,7 @@ hooks = [
21
21
 
22
22
  [[repos]]
23
23
  repo = "https://github.com/facebook/pyrefly-pre-commit"
24
- rev = "1.3.2"
24
+ rev = "1.4.0"
25
25
  hooks = [
26
26
  {
27
27
  id = "pyrefly-check",
@@ -34,7 +34,7 @@ hooks = [
34
34
 
35
35
  [[repos]]
36
36
  repo = "https://github.com/astral-sh/ruff-pre-commit"
37
- rev = "v0.16.10"
37
+ rev = "v0.17.3"
38
38
  hooks = [
39
39
  {
40
40
  id = "ruff-check",
@@ -47,7 +47,7 @@ hooks = [
47
47
 
48
48
  [[repos]]
49
49
  repo = "https://github.com/rvben/rumdl-pre-commit"
50
- rev = "v0.2.78"
50
+ rev = "v0.3.2"
51
51
  hooks = [
52
52
  { id = "rumdl-fmt" }
53
53
  ]
@@ -36,16 +36,16 @@ all = ["orjson"]
36
36
 
37
37
  [dependency-groups]
38
38
  dev = [
39
- "mkdocstrings[python]==1.0.6",
40
- "pyrefly==1.3.2",
41
- "pytest==9.1.1",
39
+ "mkdocstrings[python]==1.0.8",
40
+ "pyrefly==1.4.0",
41
+ "pytest==9.2.0",
42
42
  "pytest-cov==7.1.0",
43
- "pytest-asyncio==1.4.0",
43
+ "pytest-asyncio==1.4.1.post1",
44
44
  "pytest-xdist==3.8.0",
45
- "prek==0.5.5",
46
- "ruff==0.17.0",
45
+ "prek==0.5.9",
46
+ "ruff==0.17.3",
47
47
  "types-aiofiles==25.1.0.20260518",
48
- "zensical==0.0.69",
48
+ "zensical==0.0.74",
49
49
  ]
50
50
 
51
51
  [tool.hatch.version]
@@ -1927,7 +1927,7 @@ async def test_add_documents_custom_serializer(compress, async_empty_index):
1927
1927
  {"id": uuid4(), "title": "Test 2", "when": datetime.now()},
1928
1928
  ]
1929
1929
  index = await async_empty_index()
1930
- index._json_handler = BuiltinHandler(serializer=CustomEncoder)
1930
+ index._json_handler.serializer = CustomEncoder
1931
1931
  response = await index.add_documents(documents, compress=compress)
1932
1932
  update = await async_wait_for_task(
1933
1933
  index.http_client, response.task_uid, json_handler=index._json_handler
@@ -1622,7 +1622,7 @@ def test_add_documents_custom_serializer(compress, empty_index):
1622
1622
  {"id": uuid4(), "title": "Test 2", "when": datetime.now()},
1623
1623
  ]
1624
1624
  index = empty_index()
1625
- index._json_handler = BuiltinHandler(serializer=CustomEncoder)
1625
+ index._json_handler.serializer = CustomEncoder
1626
1626
  response = index.add_documents(documents, compress=compress)
1627
1627
  update = wait_for_task(index.http_client, response.task_uid, json_handler=index._json_handler)
1628
1628
  assert update.status == "succeeded"
@@ -0,0 +1,36 @@
1
+ import json
2
+ from uuid import UUID, uuid4
3
+
4
+ import pytest
5
+
6
+ from meilisearch_python_sdk.json_handler import BuiltinHandler, OrjsonHandler
7
+
8
+
9
+ @pytest.mark.parametrize("json_handler", (BuiltinHandler(), OrjsonHandler()))
10
+ def test_dumps(json_handler):
11
+ result = json_handler.dumps({"id": 1, "title": "Shazam!"})
12
+
13
+ assert isinstance(result, str)
14
+ assert json.loads(result) == {"id": 1, "title": "Shazam!"}
15
+
16
+
17
+ def test_serializer_not_shared():
18
+ doc_id = uuid4()
19
+
20
+ class UUIDEncoder(json.JSONEncoder):
21
+ def default(self, o):
22
+ if isinstance(o, UUID):
23
+ return str(o)
24
+ return super().default(o)
25
+
26
+ handler = BuiltinHandler(serializer=UUIDEncoder)
27
+ BuiltinHandler()
28
+
29
+ assert json.loads(
30
+ handler.dumps(
31
+ {
32
+ "id": doc_id,
33
+ }
34
+ )
35
+ ) == {"id": str(doc_id)}
36
+ assert json.loads(handler.dump_bytes({"id": doc_id})) == {"id": str(doc_id)}