meilisearch-python-sdk 4.9.0__tar.gz → 4.10.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 (104) hide show
  1. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/.github/renovate.json5 +2 -1
  2. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/.github/workflows/docs_publish.yml +1 -1
  3. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/.github/workflows/nightly_testing.yml +1 -1
  4. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/.github/workflows/pypi_publish.yml +1 -1
  5. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/.github/workflows/testing.yml +11 -11
  6. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/.pre-commit-config.yaml +2 -2
  7. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/PKG-INFO +1 -1
  8. meilisearch_python_sdk-4.10.1/docs/css/custom.css +45 -0
  9. meilisearch_python_sdk-4.10.1/docs/overrides/partials/footer.html +25 -0
  10. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/justfile +1 -4
  11. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/_client.py +14 -4
  12. meilisearch_python_sdk-4.10.1/meilisearch_python_sdk/_version.py +1 -0
  13. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/index.py +22 -22
  14. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/models/settings.py +1 -1
  15. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/mkdocs.yaml +4 -0
  16. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/pyproject.toml +7 -8
  17. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_async_client.py +15 -0
  18. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_async_index.py +2 -1
  19. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_client.py +15 -0
  20. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_index.py +2 -1
  21. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/uv.lock +283 -298
  22. meilisearch_python_sdk-4.9.0/benchmark/run_benchmark.py +0 -236
  23. meilisearch_python_sdk-4.9.0/docs/css/custom.css +0 -14
  24. meilisearch_python_sdk-4.9.0/meilisearch_python_sdk/_version.py +0 -1
  25. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/.github/FUNDING.yml +0 -0
  26. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/.github/release-draft-template.yaml +0 -0
  27. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/.github/workflows/release-drafter.yml +0 -0
  28. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/.gitignore +0 -0
  29. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/CONTRIBUTING.md +0 -0
  30. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/LICENSE +0 -0
  31. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/README.md +0 -0
  32. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/assets/add_in_batches.png +0 -0
  33. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/assets/searches.png +0 -0
  34. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/codecov.yml +0 -0
  35. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/datasets/small_movies.json +0 -0
  36. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docker-compose.https.yml +0 -0
  37. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docker-compose.yml +0 -0
  38. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/.nojekyll +0 -0
  39. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/CNAME +0 -0
  40. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/async_client_api.md +0 -0
  41. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/async_index_api.md +0 -0
  42. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/client_api.md +0 -0
  43. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/decorators_api.md +0 -0
  44. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/index.md +0 -0
  45. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/index_api.md +0 -0
  46. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/js/umami.js +0 -0
  47. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/json_handler.md +0 -0
  48. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/plugins.md +0 -0
  49. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/docs/pydantic.md +0 -0
  50. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/.gitignore +0 -0
  51. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/README.md +0 -0
  52. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/__init__.py +0 -0
  53. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/add_documents_decorator.py +0 -0
  54. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/add_documents_in_batches.py +0 -0
  55. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/async_add_documents_decorator.py +0 -0
  56. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/async_add_documents_in_batches.py +0 -0
  57. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/async_documents_and_search_results.py +0 -0
  58. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/async_search_tracker.py +0 -0
  59. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/async_update_settings.py +0 -0
  60. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/documents_and_search_results.py +0 -0
  61. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/fastapi_example.py +0 -0
  62. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/orjson_example.py +0 -0
  63. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/pyproject.toml +0 -0
  64. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/requirements.txt +0 -0
  65. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/search_tracker.py +0 -0
  66. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/tests/__init__.py +0 -0
  67. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/tests/conftest.py +0 -0
  68. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/tests/test_async_examples.py +0 -0
  69. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/tests/test_examples.py +0 -0
  70. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/ujson_example.py +0 -0
  71. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/examples/update_settings.py +0 -0
  72. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/__init__.py +0 -0
  73. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/_batch.py +0 -0
  74. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/_http_requests.py +0 -0
  75. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/_task.py +0 -0
  76. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/_utils.py +0 -0
  77. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/decorators.py +0 -0
  78. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/errors.py +0 -0
  79. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/json_handler.py +0 -0
  80. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/models/__init__.py +0 -0
  81. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/models/batch.py +0 -0
  82. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/models/client.py +0 -0
  83. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/models/documents.py +0 -0
  84. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/models/health.py +0 -0
  85. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/models/index.py +0 -0
  86. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/models/search.py +0 -0
  87. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/models/task.py +0 -0
  88. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/models/version.py +0 -0
  89. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/plugins.py +0 -0
  90. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/py.typed +0 -0
  91. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/meilisearch_python_sdk/types.py +0 -0
  92. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/__init__.py +0 -0
  93. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/conftest.py +0 -0
  94. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_async_documents.py +0 -0
  95. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_async_index_plugins.py +0 -0
  96. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_async_search.py +0 -0
  97. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_decorators.py +0 -0
  98. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_documents.py +0 -0
  99. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_errors.py +0 -0
  100. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_index_plugins.py +0 -0
  101. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_search.py +0 -0
  102. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_settings_models.py +0 -0
  103. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_utils.py +0 -0
  104. {meilisearch_python_sdk-4.9.0 → meilisearch_python_sdk-4.10.1}/tests/test_version.py +0 -0
@@ -2,7 +2,8 @@
2
2
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
3
  "extends": [
4
4
  "config:recommended",
5
- ":disableDependencyDashboard"
5
+ ":disableDependencyDashboard",
6
+ ":semanticCommitsDisabled"
6
7
  ],
7
8
  lockFileMaintenance: {
8
9
  enabled: true,
@@ -16,7 +16,7 @@ jobs:
16
16
  with:
17
17
  enable-cache: true
18
18
  - name: Set up Python
19
- uses: actions/setup-python@v5
19
+ uses: actions/setup-python@v6
20
20
  with:
21
21
  python-version: ${{ env.PYTHON_VERSION }}
22
22
  - name: Install Dependencies
@@ -20,7 +20,7 @@ jobs:
20
20
  - name: install Just
21
21
  uses: taiki-e/install-action@just
22
22
  - name: Set up Python
23
- uses: actions/setup-python@v5
23
+ uses: actions/setup-python@v6
24
24
  with:
25
25
  python-version: ${{ env.PYTHON_VERSION }}
26
26
  - name: Install Dependencies
@@ -18,7 +18,7 @@ jobs:
18
18
  with:
19
19
  enable-cache: true
20
20
  - name: Set up Python
21
- uses: actions/setup-python@v5
21
+ uses: actions/setup-python@v6
22
22
  with:
23
23
  python-version: ${{ env.PYTHON_VERSION }}
24
24
  - name: Install Dependencies
@@ -19,7 +19,7 @@ jobs:
19
19
  with:
20
20
  enable-cache: true
21
21
  - name: Set up Python
22
- uses: actions/setup-python@v5
22
+ uses: actions/setup-python@v6
23
23
  with:
24
24
  python-version: ${{ env.PYTHON_VERSION }}
25
25
  - name: Install Dependencies
@@ -42,7 +42,7 @@ jobs:
42
42
  with:
43
43
  enable-cache: true
44
44
  - name: Set up Python ${{ matrix.python-version }}
45
- uses: actions/setup-python@v5
45
+ uses: actions/setup-python@v6
46
46
  with:
47
47
  python-version: ${{ matrix.python-version }}
48
48
  - name: Install Dependencies
@@ -50,7 +50,7 @@ jobs:
50
50
  - name: Test with pytest
51
51
  run: just test-parallel-ci
52
52
  - name: Upload coverage
53
- uses: codecov/codecov-action@v5.5.0
53
+ uses: codecov/codecov-action@v5.5.1
54
54
  with:
55
55
  token: ${{ secrets.CODECOV_TOKEN }}
56
56
  fail_ci_if_error: true
@@ -70,7 +70,7 @@ jobs:
70
70
  with:
71
71
  enable-cache: true
72
72
  - name: Set up Python ${{ matrix.python-version }}
73
- uses: actions/setup-python@v5
73
+ uses: actions/setup-python@v6
74
74
  with:
75
75
  python-version: ${{ matrix.python-version }}
76
76
  - name: Install Dependencies
@@ -90,7 +90,7 @@ jobs:
90
90
  - name: Test with pytest
91
91
  run: just test-parallel-ci-http2
92
92
  - name: Upload coverage
93
- uses: codecov/codecov-action@v5.5.0
93
+ uses: codecov/codecov-action@v5.5.1
94
94
  with:
95
95
  token: ${{ secrets.CODECOV_TOKEN }}
96
96
  fail_ci_if_error: true
@@ -110,7 +110,7 @@ jobs:
110
110
  with:
111
111
  enable-cache: true
112
112
  - name: Set up Python ${{ matrix.python-version }}
113
- uses: actions/setup-python@v5
113
+ uses: actions/setup-python@v6
114
114
  with:
115
115
  python-version: ${{ matrix.python-version }}
116
116
  - name: Install Dependencies
@@ -118,7 +118,7 @@ jobs:
118
118
  - name: Test with pytest
119
119
  run: just test-no-parallel-ci
120
120
  - name: Upload coverage
121
- uses: codecov/codecov-action@v5.5.0
121
+ uses: codecov/codecov-action@v5.5.1
122
122
  with:
123
123
  token: ${{ secrets.CODECOV_TOKEN }}
124
124
  fail_ci_if_error: true
@@ -138,7 +138,7 @@ jobs:
138
138
  with:
139
139
  enable-cache: true
140
140
  - name: Set up Python ${{ matrix.python-version }}
141
- uses: actions/setup-python@v5
141
+ uses: actions/setup-python@v6
142
142
  with:
143
143
  python-version: ${{ matrix.python-version }}
144
144
  - name: Install Dependencies
@@ -158,7 +158,7 @@ jobs:
158
158
  - name: Test with pytest
159
159
  run: just test-no-parallel-ci-http2
160
160
  - name: Upload coverage
161
- uses: codecov/codecov-action@v5.5.0
161
+ uses: codecov/codecov-action@v5.5.1
162
162
  with:
163
163
  token: ${{ secrets.CODECOV_TOKEN }}
164
164
  fail_ci_if_error: true
@@ -173,7 +173,7 @@ jobs:
173
173
  - name: install Just
174
174
  uses: taiki-e/install-action@just
175
175
  - name: Set up Python ${{ matrix.python-version }}
176
- uses: actions/setup-python@v5
176
+ uses: actions/setup-python@v6
177
177
  with:
178
178
  python-version: ${{ matrix.python-version }}
179
179
  cache: pip
@@ -191,7 +191,7 @@ jobs:
191
191
  with:
192
192
  enable-cache: true
193
193
  - name: Set up Python
194
- uses: actions/setup-python@v5
194
+ uses: actions/setup-python@v6
195
195
  with:
196
196
  python-version: "3.13"
197
197
  - name: Install Dependencies
@@ -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.17.1
12
+ rev: v1.18.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.12.9
17
+ rev: v0.13.0
18
18
  hooks:
19
19
  - id: ruff-check
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.9.0
3
+ Version: 4.10.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
@@ -0,0 +1,45 @@
1
+ .md-source__repository {
2
+ overflow: visible;
3
+ }
4
+
5
+ .md-footer {
6
+ padding: 16px 0;
7
+ display: flex;
8
+ justify-content: center;
9
+ align-items: center;
10
+ background-color: #111317;
11
+ color: #ffffff;
12
+ }
13
+
14
+ .footer-buttons {
15
+ display: flex;
16
+ gap: 16px;
17
+ align-items: center;
18
+ flex-wrap: wrap;
19
+ }
20
+
21
+ .footer-btn,
22
+ .bmc-wrapper iframe {
23
+ height: 40px;
24
+ width: 150px;
25
+ min-width: 120px;
26
+ max-width: 100%;
27
+ border-radius: 6px;
28
+ display: block;
29
+ }
30
+
31
+ .bmc-wrapper {
32
+ display: flex;
33
+ align-items: center;
34
+ }
35
+
36
+ div.autodoc-docstring {
37
+ padding-left: 20px;
38
+ margin-bottom: 30px;
39
+ border-left: 5px solid rgba(230, 230, 230);
40
+ }
41
+
42
+ div.autodoc-members {
43
+ padding-left: 20px;
44
+ margin-bottom: 15px;
45
+ }
@@ -0,0 +1,25 @@
1
+ <footer class="md-footer">
2
+ <div class="footer-buttons">
3
+ <iframe
4
+ src="https://github.com/sponsors/sanders41/button"
5
+ title="Sponsor sanders41"
6
+ class="footer-btn"
7
+ ></iframe>
8
+
9
+ <div class="bmc-wrapper">
10
+ <script
11
+ type="text/javascript"
12
+ src="https://cdnjs.buymeacoffee.com/1.0.0/button.prod.min.js"
13
+ data-name="bmc-button"
14
+ data-slug="sanders41"
15
+ data-color="#87ceeb"
16
+ data-emoji=""
17
+ data-font="Cookie"
18
+ data-text="Buy me a coffee"
19
+ data-outline-color="#000000"
20
+ data-font-color="#000000"
21
+ data-coffee-color="#FFDD00"
22
+ ></script>
23
+ </div>
24
+ </div>
25
+ </footer>
@@ -78,7 +78,7 @@
78
78
  uv run mkdocs build --strict
79
79
 
80
80
  @serve-docs:
81
- mkdocs serve
81
+ uv run mkdocs serve
82
82
 
83
83
  @install:
84
84
  uv sync --frozen --all-extras
@@ -88,6 +88,3 @@
88
88
 
89
89
  @lock-upgrade:
90
90
  uv lock --upgrade
91
-
92
- @benchmark: start-meilisearch-detached && stop-meilisearch
93
- -uv run benchmark/run_benchmark.py
@@ -812,11 +812,13 @@ class AsyncClient(BaseClient):
812
812
 
813
813
  return Health(**response.json())
814
814
 
815
- async def swap_indexes(self, indexes: list[tuple[str, str]]) -> TaskInfo:
815
+ async def swap_indexes(self, indexes: list[tuple[str, str]], rename: bool = False) -> TaskInfo:
816
816
  """Swap two indexes.
817
817
 
818
818
  Args:
819
819
  indexes: A list of tuples, each tuple should contain the indexes to swap.
820
+ rename: Use rename false if you are swapping two existing indexes. Use rename true if
821
+ the second index in your array does not exist. Default = False
820
822
 
821
823
  Returns:
822
824
  The details of the task.
@@ -830,7 +832,10 @@ class AsyncClient(BaseClient):
830
832
  >>> async with AsyncClient("http://localhost.com", "masterKey") as client:
831
833
  >>> index = await client.swap_indexes([("index_a", "index_b")])
832
834
  """
833
- processed_indexes = [{"indexes": x} for x in indexes]
835
+ if rename:
836
+ processed_indexes = [{"indexes": x, "rename": True} for x in indexes]
837
+ else:
838
+ processed_indexes = [{"indexes": x} for x in indexes]
834
839
  response = await self._http_requests.post("swap-indexes", processed_indexes)
835
840
 
836
841
  return TaskInfo(**response.json())
@@ -1775,11 +1780,13 @@ class Client(BaseClient):
1775
1780
 
1776
1781
  return Health(**response.json())
1777
1782
 
1778
- def swap_indexes(self, indexes: list[tuple[str, str]]) -> TaskInfo:
1783
+ def swap_indexes(self, indexes: list[tuple[str, str]], rename: bool = False) -> TaskInfo:
1779
1784
  """Swap two indexes.
1780
1785
 
1781
1786
  Args:
1782
1787
  indexes: A list of tuples, each tuple should contain the indexes to swap.
1788
+ rename: Use rename false if you are swapping two existing indexes. Use rename true if
1789
+ the second index in your array does not exist. Default = False
1783
1790
 
1784
1791
  Returns:
1785
1792
  The details of the task.
@@ -1793,7 +1800,10 @@ class Client(BaseClient):
1793
1800
  >>> client = Client("http://localhost.com", "masterKey")
1794
1801
  >>> index = client.swap_indexes([("index_a", "index_b")])
1795
1802
  """
1796
- processed_indexes = [{"indexes": x} for x in indexes]
1803
+ if rename:
1804
+ processed_indexes = [{"indexes": x, "rename": True} for x in indexes]
1805
+ else:
1806
+ processed_indexes = [{"indexes": x} for x in indexes]
1797
1807
  response = self._http_requests.post("swap-indexes", processed_indexes)
1798
1808
 
1799
1809
  return TaskInfo(**response.json())
@@ -0,0 +1 @@
1
+ VERSION = "4.10.1"
@@ -3593,7 +3593,7 @@ class AsyncIndex(_BaseIndex):
3593
3593
 
3594
3594
  return TaskInfo(**response.json())
3595
3595
 
3596
- async def get_filterable_attributes(self) -> list[str] | list[FilterableAttributes] | None:
3596
+ async def get_filterable_attributes(self) -> list[str | FilterableAttributes] | None:
3597
3597
  """Get filterable attributes of the index.
3598
3598
 
3599
3599
  Returns:
@@ -3616,22 +3616,22 @@ class AsyncIndex(_BaseIndex):
3616
3616
 
3617
3617
  response_json = response.json()
3618
3618
 
3619
- if isinstance(response_json[0], str):
3620
- return response_json
3621
-
3622
- filterable_attributes = []
3619
+ filterable_attributes: list[str | FilterableAttributes] = []
3623
3620
  for r in response_json:
3624
- filterable_attributes.append(
3625
- FilterableAttributes(
3626
- attribute_patterns=r["attributePatterns"],
3627
- features=FilterableAttributeFeatures(**r["features"]),
3621
+ if isinstance(r, str):
3622
+ filterable_attributes.append(r)
3623
+ else:
3624
+ filterable_attributes.append(
3625
+ FilterableAttributes(
3626
+ attribute_patterns=r["attributePatterns"],
3627
+ features=FilterableAttributeFeatures(**r["features"]),
3628
+ )
3628
3629
  )
3629
- )
3630
3630
 
3631
3631
  return filterable_attributes
3632
3632
 
3633
3633
  async def update_filterable_attributes(
3634
- self, body: list[str] | list[FilterableAttributes], *, compress: bool = False
3634
+ self, body: list[str | FilterableAttributes], *, compress: bool = False
3635
3635
  ) -> TaskInfo:
3636
3636
  """Update filterable attributes of the index.
3637
3637
 
@@ -7224,7 +7224,7 @@ class Index(_BaseIndex):
7224
7224
 
7225
7225
  return TaskInfo(**response.json())
7226
7226
 
7227
- def get_filterable_attributes(self) -> list[str] | list[FilterableAttributes] | None:
7227
+ def get_filterable_attributes(self) -> list[str | FilterableAttributes] | None:
7228
7228
  """Get filterable attributes of the index.
7229
7229
 
7230
7230
  Returns:
@@ -7247,22 +7247,22 @@ class Index(_BaseIndex):
7247
7247
 
7248
7248
  response_json = response.json()
7249
7249
 
7250
- if isinstance(response_json[0], str):
7251
- return response_json
7252
-
7253
- filterable_attributes = []
7250
+ filterable_attributes: list[str | FilterableAttributes] = []
7254
7251
  for r in response_json:
7255
- filterable_attributes.append(
7256
- FilterableAttributes(
7257
- attribute_patterns=r["attributePatterns"],
7258
- features=FilterableAttributeFeatures(**r["features"]),
7252
+ if isinstance(r, str):
7253
+ filterable_attributes.append(r)
7254
+ else:
7255
+ filterable_attributes.append(
7256
+ FilterableAttributes(
7257
+ attribute_patterns=r["attributePatterns"],
7258
+ features=FilterableAttributeFeatures(**r["features"]),
7259
+ )
7259
7260
  )
7260
- )
7261
7261
 
7262
7262
  return filterable_attributes
7263
7263
 
7264
7264
  def update_filterable_attributes(
7265
- self, body: list[str] | list[FilterableAttributes], *, compress: bool = False
7265
+ self, body: list[str | FilterableAttributes], *, compress: bool = False
7266
7266
  ) -> TaskInfo:
7267
7267
  """Update filterable attributes of the index.
7268
7268
 
@@ -167,7 +167,7 @@ class MeilisearchSettings(CamelBase):
167
167
  synonyms: JsonDict | None = None
168
168
  stop_words: list[str] | None = None
169
169
  ranking_rules: list[str] | None = None
170
- filterable_attributes: list[str] | list[FilterableAttributes] | None = None
170
+ filterable_attributes: list[str | FilterableAttributes] | None = None
171
171
  distinct_attribute: str | None = None
172
172
  searchable_attributes: list[str] | None = None
173
173
  displayed_attributes: list[str] | None = None
@@ -4,6 +4,7 @@ site_url: https://meilisearch-python-sdk.paulsanders.dev
4
4
 
5
5
  theme:
6
6
  name: material
7
+ custom_dir: docs/overrides
7
8
  locale: en
8
9
  icon:
9
10
  repo: fontawesome/brands/github
@@ -44,3 +45,6 @@ plugins:
44
45
 
45
46
  extra_javascript:
46
47
  - "js/umami.js"
48
+
49
+ extra_css:
50
+ - "css/custom.css"
@@ -41,19 +41,18 @@ all = ["orjson", "ujson"]
41
41
  [dependency-groups]
42
42
  dev = [
43
43
  "mkdocs==1.6.1",
44
- "mkdocs-material==9.6.18",
44
+ "mkdocs-material==9.6.20",
45
45
  "mkdocstrings[python]==0.30.0",
46
- "mypy[faster-cache]==1.17.1",
46
+ "mypy[faster-cache]==1.18.2",
47
47
  "pre-commit==4.3.0",
48
- "pytest==8.4.1",
49
- "pytest-cov==6.2.1",
50
- "pytest-asyncio==1.1.0",
48
+ "pytest==8.4.2",
49
+ "pytest-cov==7.0.0",
50
+ "pytest-asyncio==1.2.0",
51
51
  "pytest-xdist==3.8.0",
52
- "ruff==0.12.10",
52
+ "ruff==0.13.1",
53
53
  "types-aiofiles==24.1.0.20250822",
54
- "typing-extensions==4.14.1",
54
+ "typing-extensions==4.15.0",
55
55
  "types-ujson==5.10.0.20250822",
56
- "meilisearch==0.37.0",
57
56
  "rich==14.1.0",
58
57
  ]
59
58
 
@@ -550,6 +550,21 @@ async def test_swap_indexes(async_client, async_empty_index):
550
550
  assert task.task_type == "indexSwap"
551
551
 
552
552
 
553
+ @pytest.mark.no_parallel
554
+ async def test_swap_indexes_rename(async_client, async_empty_index):
555
+ new_name = str(uuid4())
556
+ index = await async_empty_index()
557
+ task = await index.add_documents([{"id": 1, "title": index.uid}])
558
+ await async_client.wait_for_task(task.task_uid)
559
+ swapTask = await async_client.swap_indexes([(index.uid, new_name)], rename=True)
560
+ task = async_client.wait_for_task(swapTask.task_uid)
561
+
562
+ indexes = await async_client.get_indexes()
563
+ uids = [index.uid for index in indexes]
564
+ assert index.uid not in uids
565
+ assert new_name in uids
566
+
567
+
553
568
  @pytest.mark.usefixtures("create_tasks")
554
569
  @pytest.mark.no_parallel
555
570
  async def test_cancel_task_statuses(async_client):
@@ -586,6 +586,7 @@ async def test_get_filterable_attributes(async_empty_index):
586
586
  facet_search=True, filter=Filter(equality=True, comparison=False)
587
587
  ),
588
588
  ),
589
+ "genre",
589
590
  ],
590
591
  ),
591
592
  )
@@ -594,7 +595,7 @@ async def test_update_filterable_attributes(compress, async_empty_index, filtera
594
595
  response = await index.update_filterable_attributes(filterable_attributes, compress=compress)
595
596
  await async_wait_for_task(index.http_client, response.task_uid)
596
597
  response = await index.get_filterable_attributes()
597
- assert sorted(response) == filterable_attributes
598
+ assert response == filterable_attributes
598
599
 
599
600
 
600
601
  @pytest.mark.parametrize(
@@ -547,6 +547,21 @@ def test_swap_indexes(client, empty_index):
547
547
  assert task.task_type == "indexSwap"
548
548
 
549
549
 
550
+ @pytest.mark.no_parallel
551
+ def test_swap_indexes_rename(client, empty_index):
552
+ new_name = str(uuid4())
553
+ index = empty_index()
554
+ task = index.add_documents([{"id": 1, "title": index.uid}])
555
+ client.wait_for_task(task.task_uid)
556
+ swapTask = client.swap_indexes([(index.uid, new_name)], rename=True)
557
+ task = client.wait_for_task(swapTask.task_uid)
558
+
559
+ indexes = client.get_indexes()
560
+ uids = [index.uid for index in indexes]
561
+ assert index.uid not in uids
562
+ assert new_name in uids
563
+
564
+
550
565
  @pytest.mark.usefixtures("create_tasks")
551
566
  @pytest.mark.no_parallel
552
567
  def test_cancel_statuses(client):
@@ -574,6 +574,7 @@ def test_get_filterable_attributes(empty_index):
574
574
  facet_search=True, filter=Filter(equality=True, comparison=False)
575
575
  ),
576
576
  ),
577
+ "genre",
577
578
  ],
578
579
  ),
579
580
  )
@@ -582,7 +583,7 @@ def test_update_filterable_attributes(compress, empty_index, filterable_attribut
582
583
  response = index.update_filterable_attributes(filterable_attributes, compress=compress)
583
584
  wait_for_task(index.http_client, response.task_uid)
584
585
  response = index.get_filterable_attributes()
585
- assert sorted(response) == filterable_attributes
586
+ assert response == filterable_attributes
586
587
 
587
588
 
588
589
  @pytest.mark.parametrize(