meilisearch-python-sdk 3.5.1__tar.gz → 3.6.0__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 (98) hide show
  1. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/.github/workflows/nightly_testing.yml +3 -12
  2. meilisearch_python_sdk-3.5.1/.github/workflows/pypi_publish.yaml → meilisearch_python_sdk-3.6.0/.github/workflows/pypi_publish.yml +10 -8
  3. meilisearch_python_sdk-3.5.1/.github/workflows/testing.yaml → meilisearch_python_sdk-3.6.0/.github/workflows/testing.yml +18 -67
  4. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/.pre-commit-config.yaml +3 -3
  5. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/PKG-INFO +2 -2
  6. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docker-compose.https.yml +10 -2
  7. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docker-compose.yml +2 -1
  8. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/requirements.txt +1 -1
  9. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/justfile +12 -12
  10. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/_client.py +21 -4
  11. meilisearch_python_sdk-3.6.0/meilisearch_python_sdk/_version.py +1 -0
  12. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/index.py +16 -4
  13. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/models/search.py +14 -1
  14. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/models/settings.py +8 -4
  15. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/pyproject.toml +4 -4
  16. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_async_search.py +56 -1
  17. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_search.py +33 -1
  18. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/uv.lock +41 -31
  19. meilisearch_python_sdk-3.5.1/meilisearch_python_sdk/_version.py +0 -1
  20. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/.github/FUNDING.yml +0 -0
  21. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/.github/dependabot.yaml +0 -0
  22. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/.github/release-draft-template.yaml +0 -0
  23. /meilisearch_python_sdk-3.5.1/.github/workflows/release-drafter.yaml → /meilisearch_python_sdk-3.6.0/.github/workflows/release-drafter.yml +0 -0
  24. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/.gitignore +0 -0
  25. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/CONTRIBUTING.md +0 -0
  26. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/LICENSE +0 -0
  27. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/README.md +0 -0
  28. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/assets/add_in_batches.png +0 -0
  29. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/assets/searches.png +0 -0
  30. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/benchmark/run_benchmark.py +0 -0
  31. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/codecov.yml +0 -0
  32. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/datasets/small_movies.json +0 -0
  33. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/.nojekyll +0 -0
  34. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/CNAME +0 -0
  35. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/async_client_api.md +0 -0
  36. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/async_index_api.md +0 -0
  37. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/client_api.md +0 -0
  38. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/css/custom.css +0 -0
  39. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/decorators_api.md +0 -0
  40. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/index.md +0 -0
  41. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/index_api.md +0 -0
  42. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/js/umami.js +0 -0
  43. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/json_handler.md +0 -0
  44. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/plugins.md +0 -0
  45. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/docs/pydantic.md +0 -0
  46. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/.gitignore +0 -0
  47. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/README.md +0 -0
  48. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/__init__.py +0 -0
  49. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/add_documents_decorator.py +0 -0
  50. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/add_documents_in_batches.py +0 -0
  51. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/async_add_documents_decorator.py +0 -0
  52. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/async_add_documents_in_batches.py +0 -0
  53. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/async_documents_and_search_results.py +0 -0
  54. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/async_search_tracker.py +0 -0
  55. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/async_update_settings.py +0 -0
  56. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/documents_and_search_results.py +0 -0
  57. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/fastapi_example.py +0 -0
  58. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/orjson_example.py +0 -0
  59. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/pyproject.toml +0 -0
  60. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/search_tracker.py +0 -0
  61. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/tests/__init__.py +0 -0
  62. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/tests/conftest.py +0 -0
  63. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/tests/test_async_examples.py +0 -0
  64. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/tests/test_examples.py +0 -0
  65. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/ujson_example.py +0 -0
  66. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/examples/update_settings.py +0 -0
  67. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/__init__.py +0 -0
  68. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/_http_requests.py +0 -0
  69. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/_task.py +0 -0
  70. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/_utils.py +0 -0
  71. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/decorators.py +0 -0
  72. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/errors.py +0 -0
  73. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/json_handler.py +0 -0
  74. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/models/__init__.py +0 -0
  75. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/models/client.py +0 -0
  76. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/models/documents.py +0 -0
  77. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/models/health.py +0 -0
  78. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/models/index.py +0 -0
  79. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/models/task.py +0 -0
  80. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/models/version.py +0 -0
  81. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/plugins.py +0 -0
  82. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/py.typed +0 -0
  83. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/meilisearch_python_sdk/types.py +0 -0
  84. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/mkdocs.yaml +0 -0
  85. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/__init__.py +0 -0
  86. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/conftest.py +0 -0
  87. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_async_client.py +0 -0
  88. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_async_documents.py +0 -0
  89. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_async_index.py +0 -0
  90. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_async_index_plugins.py +0 -0
  91. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_client.py +0 -0
  92. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_decorators.py +0 -0
  93. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_documents.py +0 -0
  94. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_errors.py +0 -0
  95. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_index.py +0 -0
  96. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_index_plugins.py +0 -0
  97. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_utils.py +0 -0
  98. {meilisearch_python_sdk-3.5.1 → meilisearch_python_sdk-3.6.0}/tests/test_version.py +0 -0
@@ -5,7 +5,6 @@ on:
5
5
  # Set with UTC time
6
6
  - cron: "0 5 * * *"
7
7
  env:
8
- UV_CACHE_DIR: /tmp/.uv-cache
9
8
  PYTHON_VERSION: "3.12"
10
9
  jobs:
11
10
  random-test-order:
@@ -15,26 +14,18 @@ jobs:
15
14
  steps:
16
15
  - uses: actions/checkout@v4
17
16
  - name: Install uv
18
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
17
+ uses: astral-sh/setup-uv@v3
18
+ with:
19
+ enable-cache: true
19
20
  - name: install Just
20
21
  uses: taiki-e/install-action@just
21
22
  - name: Set up Python
22
23
  uses: actions/setup-python@v5
23
24
  with:
24
25
  python-version: ${{ env.PYTHON_VERSION }}
25
- - name: Restore uv cache
26
- uses: actions/cache@v4
27
- with:
28
- path: ${{ env.UV_CACHE_DIR }}
29
- key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
30
- restore-keys: |
31
- uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
32
- uv-${{ runner.os }}
33
26
  - name: Install Dependencies
34
27
  run: |
35
28
  just install
36
29
  uv pip install pytest-randomly
37
30
  - name: Test with pytest in random order
38
31
  run: just test-ci
39
- - name: Minimize uv cache
40
- run: uv cache prune --ci
@@ -8,22 +8,24 @@ env:
8
8
  jobs:
9
9
  deploy:
10
10
  runs-on: ubuntu-latest
11
+ permissions:
12
+ # For PyPI's trusted publishing.
13
+ id-token: write
11
14
  steps:
12
15
  - uses: actions/checkout@v4
13
16
  - name: Install uv
14
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
17
+ uses: astral-sh/setup-uv@v3
18
+ with:
19
+ enable-cache: true
15
20
  - name: Set up Python
16
21
  uses: actions/setup-python@v5
17
22
  with:
18
23
  python-version: ${{ env.PYTHON_VERSION }}
19
24
  - name: Install Dependencies
20
25
  run: uv sync --frozen --all-extras
21
- - name: Build and publish package
22
- env:
23
- TWINE_USERNAME: __token__
24
- TWINE_PASSWORD: "${{ secrets.PYPI_API_KEY }}"
25
- run: |
26
- uvx --from build pyproject-build --installer uv
27
- uvx twine upload dist/*
26
+ - name: Build package
27
+ run: uv build
28
+ - name: Publish package
29
+ run: uv publish
28
30
  - name: Deploy Docs
29
31
  run: uv run mkdocs gh-deploy --force
@@ -6,7 +6,6 @@ on:
6
6
  - main
7
7
  pull_request:
8
8
  env:
9
- UV_CACHE_DIR: /tmp/.uv-cache
10
9
  PYTHON_VERSION: "3.9"
11
10
  jobs:
12
11
  linting:
@@ -16,25 +15,17 @@ jobs:
16
15
  - name: install Just
17
16
  uses: taiki-e/install-action@just
18
17
  - name: Install uv
19
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
18
+ uses: astral-sh/setup-uv@v3
19
+ with:
20
+ enable-cache: true
20
21
  - name: Set up Python
21
22
  uses: actions/setup-python@v5
22
23
  with:
23
24
  python-version: ${{ env.PYTHON_VERSION }}
24
- - name: Restore uv cache
25
- uses: actions/cache@v4
26
- with:
27
- path: ${{ env.UV_CACHE_DIR }}
28
- key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
29
- restore-keys: |
30
- uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
31
- uv-${{ runner.os }}
32
25
  - name: Install Dependencies
33
26
  run: just install
34
27
  - name: mypy check
35
28
  run: just mypy
36
- - name: Minimize uv cache
37
- run: uv cache prune --ci
38
29
 
39
30
  parallel-testing:
40
31
  strategy:
@@ -47,19 +38,13 @@ jobs:
47
38
  - name: install Just
48
39
  uses: taiki-e/install-action@just
49
40
  - name: Install uv
50
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
41
+ uses: astral-sh/setup-uv@v3
42
+ with:
43
+ enable-cache: true
51
44
  - name: Set up Python ${{ matrix.python-version }}
52
45
  uses: actions/setup-python@v5
53
46
  with:
54
47
  python-version: ${{ matrix.python-version }}
55
- - name: Restore uv cache
56
- uses: actions/cache@v4
57
- with:
58
- path: ${{ env.UV_CACHE_DIR }}
59
- key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
60
- restore-keys: |
61
- uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
62
- uv-${{ runner.os }}
63
48
  - name: Install Dependencies
64
49
  run: just install
65
50
  - name: Test with pytest
@@ -69,8 +54,6 @@ jobs:
69
54
  with:
70
55
  token: ${{ secrets.CODECOV_TOKEN }}
71
56
  fail_ci_if_error: true
72
- - name: Minimize uv cache
73
- run: uv cache prune --ci
74
57
 
75
58
  parallel-testing-http2:
76
59
  strategy:
@@ -83,19 +66,13 @@ jobs:
83
66
  - name: install Just
84
67
  uses: taiki-e/install-action@just
85
68
  - name: Install uv
86
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
69
+ uses: astral-sh/setup-uv@v3
70
+ with:
71
+ enable-cache: true
87
72
  - name: Set up Python ${{ matrix.python-version }}
88
73
  uses: actions/setup-python@v5
89
74
  with:
90
75
  python-version: ${{ matrix.python-version }}
91
- - name: Restore uv cache
92
- uses: actions/cache@v4
93
- with:
94
- path: ${{ env.UV_CACHE_DIR }}
95
- key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
96
- restore-keys: |
97
- uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
98
- uv-${{ runner.os }}
99
76
  - name: Install Dependencies
100
77
  run: just install
101
78
  - name: Install truststore
@@ -117,8 +94,6 @@ jobs:
117
94
  with:
118
95
  token: ${{ secrets.CODECOV_TOKEN }}
119
96
  fail_ci_if_error: true
120
- - name: Minimize uv cache
121
- run: uv cache prune --ci
122
97
 
123
98
  no-parallel-testing:
124
99
  strategy:
@@ -131,19 +106,13 @@ jobs:
131
106
  - name: install Just
132
107
  uses: taiki-e/install-action@just
133
108
  - name: Install uv
134
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
109
+ uses: astral-sh/setup-uv@v3
110
+ with:
111
+ enable-cache: true
135
112
  - name: Set up Python ${{ matrix.python-version }}
136
113
  uses: actions/setup-python@v5
137
114
  with:
138
115
  python-version: ${{ matrix.python-version }}
139
- - name: Restore uv cache
140
- uses: actions/cache@v4
141
- with:
142
- path: ${{ env.UV_CACHE_DIR }}
143
- key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
144
- restore-keys: |
145
- uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
146
- uv-${{ runner.os }}
147
116
  - name: Install Dependencies
148
117
  run: just install
149
118
  - name: Test with pytest
@@ -153,8 +122,6 @@ jobs:
153
122
  with:
154
123
  token: ${{ secrets.CODECOV_TOKEN }}
155
124
  fail_ci_if_error: true
156
- - name: Minimize uv cache
157
- run: uv cache prune --ci
158
125
 
159
126
  no-parallel-testing-http2:
160
127
  strategy:
@@ -167,19 +134,13 @@ jobs:
167
134
  - name: install Just
168
135
  uses: taiki-e/install-action@just
169
136
  - name: Install uv
170
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
137
+ uses: astral-sh/setup-uv@v3
138
+ with:
139
+ enable-cache: true
171
140
  - name: Set up Python ${{ matrix.python-version }}
172
141
  uses: actions/setup-python@v5
173
142
  with:
174
143
  python-version: ${{ matrix.python-version }}
175
- - name: Restore uv cache
176
- uses: actions/cache@v4
177
- with:
178
- path: ${{ env.UV_CACHE_DIR }}
179
- key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
180
- restore-keys: |
181
- uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
182
- uv-${{ runner.os }}
183
144
  - name: Install Dependencies
184
145
  run: just install
185
146
  - name: Install truststore
@@ -201,8 +162,6 @@ jobs:
201
162
  with:
202
163
  token: ${{ secrets.CODECOV_TOKEN }}
203
164
  fail_ci_if_error: true
204
- - name: Minimize uv cache
205
- run: uv cache prune --ci
206
165
  example-testing:
207
166
  strategy:
208
167
  fail-fast: false
@@ -228,22 +187,14 @@ jobs:
228
187
  - name: install Just
229
188
  uses: taiki-e/install-action@just
230
189
  - name: Install uv
231
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
190
+ uses: astral-sh/setup-uv@v3
191
+ with:
192
+ enable-cache: true
232
193
  - name: Set up Python
233
194
  uses: actions/setup-python@v5
234
195
  with:
235
196
  python-version: "3.11"
236
- - name: Restore uv cache
237
- uses: actions/cache@v4
238
- with:
239
- path: ${{ env.UV_CACHE_DIR }}
240
- key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
241
- restore-keys: |
242
- uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
243
- uv-${{ runner.os }}
244
197
  - name: Install Dependencies
245
198
  run: just install
246
199
  - name: Test Docs Build
247
200
  run: just build-docs
248
- - name: Minimize uv cache
249
- run: uv cache prune --ci
@@ -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.11.2
12
+ rev: v1.13.0
13
13
  hooks:
14
14
  - id: mypy
15
- additional_dependencies: [pydantic, types-aiofiles, types-ujson]
15
+ additional_dependencies: [pydantic, orjson, types-aiofiles, types-ujson]
16
16
  - repo: https://github.com/astral-sh/ruff-pre-commit
17
- rev: v0.6.9
17
+ rev: v0.7.0
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.3
2
2
  Name: meilisearch-python-sdk
3
- Version: 3.5.1
3
+ Version: 3.6.0
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
@@ -41,7 +41,7 @@ Classifier: Programming Language :: Python :: 3.13
41
41
  Classifier: Typing :: Typed
42
42
  Requires-Python: >=3.9
43
43
  Requires-Dist: aiofiles>=0.7
44
- Requires-Dist: camel-converter>=1.0.0
44
+ Requires-Dist: camel-converter[pydantic]>=1.0.0
45
45
  Requires-Dist: eval-type-backport>=0.2.0; python_version < '3.10'
46
46
  Requires-Dist: httpx[http2]>=0.17
47
47
  Requires-Dist: pydantic>=2.0.0
@@ -1,6 +1,7 @@
1
1
  services:
2
2
  meilisearch:
3
- image: getmeili/meilisearch:latest
3
+ # image: getmeili/meilisearch:latest
4
+ image: getmeili/meilisearch:v1
4
5
  ports:
5
6
  - "7700:7700"
6
7
  environment:
@@ -9,4 +10,11 @@ services:
9
10
  volumes:
10
11
  - ./meilisearch.key:/meilisearch.key
11
12
  - ./meilisearch.crt:/meilisearch.crt
12
- command: ["meilisearch", "--ssl-cert-path", "/meilisearch.crt", "--ssl-key-path", "/meilisearch.key"]
13
+ command:
14
+ [
15
+ "meilisearch",
16
+ "--ssl-cert-path",
17
+ "/meilisearch.crt",
18
+ "--ssl-key-path",
19
+ "/meilisearch.key",
20
+ ]
@@ -1,6 +1,7 @@
1
1
  services:
2
2
  meilisearch:
3
- image: getmeili/meilisearch:latest
3
+ # image: getmeili/meilisearch:latest
4
+ image: getmeili/meilisearch:v1
4
5
  ports:
5
6
  - "7700:7700"
6
7
  environment:
@@ -1,4 +1,4 @@
1
1
  ../.[all]
2
- fastapi==0.115.0
2
+ fastapi==0.115.4
3
3
  pytest==8.3.3
4
4
  pytest-asyncio==0.24.0
@@ -18,23 +18,23 @@
18
18
  @ruff-format:
19
19
  uv run ruff format meilisearch_python_sdk tests examples
20
20
 
21
- @test:
22
- -uv run pytest -x
21
+ @test *args="":
22
+ -uv run pytest {{args}}
23
23
 
24
- @test-http2:
25
- -uv run pytest -x --http2
24
+ @test-http2 *args="":
25
+ -uv run pytest --http2 {{args}}
26
26
 
27
- @test-parallel:
28
- -uv run pytest -n auto -x -m "not no_parallel"
27
+ @test-parallel *args="":
28
+ -uv run pytest -n auto -m "not no_parallel" {{args}}
29
29
 
30
- @test-no-parallel:
31
- -uv run pytest -x -m "no_parallel"
30
+ @test-no-parallel *args="":
31
+ -uv run pytest -m "no_parallel" {{args}}
32
32
 
33
- @test-parallel-http2:
34
- -uv run pytest -n auto -x -m "not no_parallel" --http2
33
+ @test-parallel-http2 *args="":
34
+ -uv run pytest -n auto -m "not no_parallel" --http2 {{args}}
35
35
 
36
- @test-no-parallel-http2:
37
- -uv run pytest -x -m "no_parallel" --http2
36
+ @test-no-parallel-http2 *args="":
37
+ -uv run pytest -m "no_parallel" --http2 {{args}}
38
38
 
39
39
  @test-ci: start-meilisearch-detached && stop-meilisearch
40
40
  uv run pytest --cov=meilisearch_python_sdk --cov-report=xml
@@ -24,6 +24,7 @@ from meilisearch_python_sdk.models.health import Health
24
24
  from meilisearch_python_sdk.models.index import IndexInfo
25
25
  from meilisearch_python_sdk.models.search import (
26
26
  Federation,
27
+ FederationMerged,
27
28
  SearchParams,
28
29
  SearchResultsFederated,
29
30
  SearchResultsWithUID,
@@ -587,7 +588,7 @@ class AsyncClient(BaseClient):
587
588
  self,
588
589
  queries: list[SearchParams],
589
590
  *,
590
- federation: Federation | None = None,
591
+ federation: Federation | FederationMerged | None = None,
591
592
  hits_type: Any = JsonDict,
592
593
  ) -> list[SearchResultsWithUID] | SearchResultsFederated:
593
594
  """Multi-index search.
@@ -628,10 +629,18 @@ class AsyncClient(BaseClient):
628
629
  else:
629
630
  processed_queries = [x.model_dump(by_alias=True) for x in queries]
630
631
 
632
+ if federation:
633
+ federation_payload = federation.model_dump(by_alias=True)
634
+ if federation.facets_by_index is None:
635
+ del federation_payload["facetsByIndex"]
636
+
637
+ else:
638
+ federation_payload = None
639
+
631
640
  response = await self._http_requests.post(
632
641
  url,
633
642
  body={
634
- "federation": federation.model_dump(by_alias=True) if federation else None,
643
+ "federation": federation_payload,
635
644
  "queries": processed_queries,
636
645
  },
637
646
  )
@@ -1396,7 +1405,7 @@ class Client(BaseClient):
1396
1405
  self,
1397
1406
  queries: list[SearchParams],
1398
1407
  *,
1399
- federation: Federation | None = None,
1408
+ federation: Federation | FederationMerged | None = None,
1400
1409
  hits_type: Any = JsonDict,
1401
1410
  ) -> list[SearchResultsWithUID] | SearchResultsFederated:
1402
1411
  """Multi-index search.
@@ -1437,10 +1446,18 @@ class Client(BaseClient):
1437
1446
  else:
1438
1447
  processed_queries = [x.model_dump(by_alias=True) for x in queries]
1439
1448
 
1449
+ if federation:
1450
+ federation_payload = federation.model_dump(by_alias=True)
1451
+ if federation.facets_by_index is None:
1452
+ del federation_payload["facetsByIndex"]
1453
+
1454
+ else:
1455
+ federation_payload = None
1456
+
1440
1457
  response = self._http_requests.post(
1441
1458
  url,
1442
1459
  body={
1443
- "federation": federation.model_dump(by_alias=True) if federation else None,
1460
+ "federation": federation_payload,
1444
1461
  "queries": processed_queries,
1445
1462
  },
1446
1463
  )
@@ -0,0 +1 @@
1
+ VERSION = "3.6.0"
@@ -3079,7 +3079,11 @@ class AsyncIndex(_BaseIndex):
3079
3079
  >>> index = client.index("movies")
3080
3080
  >>> await index.update_settings(new_settings)
3081
3081
  """
3082
- body_dict = {k: v for k, v in body.model_dump(by_alias=True).items() if v is not None}
3082
+ body_dict = {
3083
+ k: v
3084
+ for k, v in body.model_dump(by_alias=True, exclude_none=True).items()
3085
+ if v is not None
3086
+ }
3083
3087
  response = await self._http_requests.patch(self._settings_url, body_dict, compress=compress)
3084
3088
 
3085
3089
  return TaskInfo(**response.json())
@@ -4270,7 +4274,9 @@ class AsyncIndex(_BaseIndex):
4270
4274
  payload = {}
4271
4275
  for key, embedder in embedders.embedders.items():
4272
4276
  payload[key] = {
4273
- k: v for k, v in embedder.model_dump(by_alias=True).items() if v is not None
4277
+ k: v
4278
+ for k, v in embedder.model_dump(by_alias=True, exclude_none=True).items()
4279
+ if v is not None
4274
4280
  }
4275
4281
 
4276
4282
  response = await self._http_requests.patch(
@@ -6498,7 +6504,11 @@ class Index(_BaseIndex):
6498
6504
  >>> index = client.index("movies")
6499
6505
  >>> index.update_settings(new_settings)
6500
6506
  """
6501
- body_dict = {k: v for k, v in body.model_dump(by_alias=True).items() if v is not None}
6507
+ body_dict = {
6508
+ k: v
6509
+ for k, v in body.model_dump(by_alias=True, exclude_none=True).items()
6510
+ if v is not None
6511
+ }
6502
6512
  response = self._http_requests.patch(self._settings_url, body_dict, compress=compress)
6503
6513
 
6504
6514
  return TaskInfo(**response.json())
@@ -7672,7 +7682,9 @@ class Index(_BaseIndex):
7672
7682
  payload = {}
7673
7683
  for key, embedder in embedders.embedders.items():
7674
7684
  payload[key] = {
7675
- k: v for k, v in embedder.model_dump(by_alias=True).items() if v is not None
7685
+ k: v
7686
+ for k, v in embedder.model_dump(by_alias=True, exclude_none=True).items()
7687
+ if v is not None
7676
7688
  }
7677
7689
 
7678
7690
  response = self._http_requests.patch(
@@ -24,12 +24,24 @@ class FacetSearchResults(CamelBase):
24
24
 
25
25
  class Hybrid(CamelBase):
26
26
  semantic_ratio: float
27
- embedder: str | None = None
27
+ embedder: str
28
+
29
+
30
+ class MergeFacets(CamelBase):
31
+ max_values_per_facet: int
28
32
 
29
33
 
30
34
  class Federation(CamelBase):
31
35
  limit: int = 20
32
36
  offset: int = 0
37
+ facets_by_index: dict[str, list[str]] | None = None
38
+
39
+
40
+ class FederationMerged(CamelBase):
41
+ limit: int = 20
42
+ offset: int = 0
43
+ facets_by_index: dict[str, list[str]] | None = None
44
+ merge_facets: MergeFacets | None
33
45
 
34
46
 
35
47
  class SearchParams(CamelBase):
@@ -99,6 +111,7 @@ class SearchResultsFederated(CamelBase, Generic[T]):
99
111
  page: int | None = None
100
112
  hits_per_page: int | None = None
101
113
  semantic_hit_count: int | None = None
114
+ facets_by_index: JsonDict | None = None
102
115
 
103
116
 
104
117
  class SimilarSearchResults(CamelBase, Generic[T]):
@@ -49,18 +49,20 @@ class Distribution(CamelBase):
49
49
  class OpenAiEmbedder(CamelBase):
50
50
  source: str = "openAi"
51
51
  url: str | None = None
52
- model: str | None = None # Defaults to text-embedding-ada-002
53
- dimensions: int | None = None # Uses the model default
54
- api_key: str | None = None # Can be provided through a CLI option or environment variable
52
+ model: str | None = None
53
+ dimensions: int | None = None
54
+ api_key: str | None = None
55
55
  document_template: str | None = None
56
+ document_template_max_bytes: int | None = None
56
57
  distribution: Distribution | None = None
57
58
 
58
59
 
59
60
  class HuggingFaceEmbedder(CamelBase):
60
61
  source: str = "huggingFace"
61
- model: str | None = None # Defaults to BAAI/bge-base-en-v1.5
62
+ model: str | None = None
62
63
  revision: str | None = None
63
64
  document_template: str | None = None
65
+ document_template_max_bytes: int | None = None
64
66
  distribution: Distribution | None = None
65
67
 
66
68
 
@@ -71,6 +73,7 @@ class OllamaEmbedder(CamelBase):
71
73
  model: str
72
74
  dimensions: int | None = None
73
75
  document_template: str | None = None
76
+ document_template_max_bytes: int | None = None
74
77
  distribution: Distribution | None = None
75
78
 
76
79
 
@@ -80,6 +83,7 @@ class RestEmbedder(CamelBase):
80
83
  api_key: str | None = None
81
84
  dimensions: int
82
85
  document_template: str | None = None
86
+ document_template_max_bytes: int | None = None
83
87
  distribution: Distribution | None = None
84
88
  headers: JsonDict | None = None
85
89
  request: JsonDict
@@ -25,7 +25,7 @@ classifiers=[
25
25
  dynamic = ["version"]
26
26
  dependencies = [
27
27
  "aiofiles>=0.7",
28
- "camel-converter>=1.0.0",
28
+ "camel-converter[pydantic]>=1.0.0",
29
29
  # allows pydantic to use pipe instead of Union
30
30
  "eval-type-backport>=0.2.0; python_version < '3.10'",
31
31
  "httpx[http2]>=0.17",
@@ -38,12 +38,12 @@ orjson = ["orjson>=3.10.6"]
38
38
  ujson = ["ujson>=5.10.0"]
39
39
  all = ["orjson", "ujson"]
40
40
 
41
- [tool.uv]
42
- dev-dependencies = [
41
+ [dependency-groups]
42
+ dev = [
43
43
  "mkdocs==1.6.0",
44
44
  "mkdocs-material==9.5.32",
45
45
  "mkdocstrings[python]==0.25.2",
46
- "mypy==1.11.1",
46
+ "mypy[faster-cache]==1.13.0",
47
47
  "pre-commit==4.0.0",
48
48
  "pytest==8.3.2",
49
49
  "pytest-cov==5.0.0",
@@ -9,7 +9,13 @@ from camel_converter.pydantic_base import CamelBase
9
9
  from meilisearch_python_sdk import AsyncClient
10
10
  from meilisearch_python_sdk._task import async_wait_for_task
11
11
  from meilisearch_python_sdk.errors import MeilisearchApiError, MeilisearchError
12
- from meilisearch_python_sdk.models.search import Federation, Hybrid, SearchParams
12
+ from meilisearch_python_sdk.models.search import (
13
+ Federation,
14
+ FederationMerged,
15
+ Hybrid,
16
+ MergeFacets,
17
+ SearchParams,
18
+ )
13
19
 
14
20
 
15
21
  async def test_basic_search(async_index_with_documents):
@@ -395,6 +401,55 @@ async def test_multi_search_federated(async_client, async_index_with_documents,
395
401
  assert "_federation" in response.hits[0]
396
402
 
397
403
 
404
+ async def test_multi_search_federated_facets_by_index(
405
+ async_client, async_index_with_documents, async_empty_index
406
+ ):
407
+ index1 = await async_index_with_documents()
408
+ task = await index1.update_filterable_attributes(["title"])
409
+ await async_client.wait_for_task(task.task_uid)
410
+ index2 = await async_empty_index()
411
+ federation = Federation()
412
+ federation.facets_by_index = {index1.uid: ["title"]}
413
+ response = await async_client.multi_search(
414
+ [
415
+ SearchParams(index_uid=index1.uid, query="How to Train Your Dragon"),
416
+ SearchParams(index_uid=index2.uid, query=""),
417
+ ],
418
+ federation=federation,
419
+ )
420
+
421
+ assert response.hits[0]["id"] == "166428"
422
+ assert "_formatted" not in response.hits[0]
423
+ assert "_federation" in response.hits[0]
424
+ assert response.facets_by_index is not None
425
+
426
+
427
+ async def test_multi_search_federated_merge_facets(
428
+ async_client,
429
+ async_index_with_documents,
430
+ async_empty_index,
431
+ ):
432
+ index1 = await async_index_with_documents()
433
+ task = await index1.update_filterable_attributes(["title"])
434
+ await async_client.wait_for_task(task.task_uid)
435
+ index2 = await async_empty_index()
436
+ federation = FederationMerged(merge_facets=MergeFacets(max_values_per_facet=10))
437
+ federation.facets_by_index = {index1.uid: ["title"]}
438
+ response = await async_client.multi_search(
439
+ [
440
+ SearchParams(index_uid=index1.uid, query="How to Train Your Dragon"),
441
+ SearchParams(index_uid=index2.uid, query=""),
442
+ ],
443
+ federation=federation,
444
+ )
445
+
446
+ assert response.hits[0]["id"] == "166428"
447
+ assert "_formatted" not in response.hits[0]
448
+ assert "_federation" in response.hits[0]
449
+ assert response.facets_by_index is None
450
+ assert response.facet_distribution is not None
451
+
452
+
398
453
  async def test_multi_search_locales(async_client, async_index_with_documents, async_empty_index):
399
454
  index1 = await async_index_with_documents()
400
455
  index2 = await async_empty_index()
@@ -9,7 +9,13 @@ from camel_converter.pydantic_base import CamelBase
9
9
  from meilisearch_python_sdk import Client
10
10
  from meilisearch_python_sdk._task import wait_for_task
11
11
  from meilisearch_python_sdk.errors import MeilisearchApiError, MeilisearchError
12
- from meilisearch_python_sdk.models.search import Federation, Hybrid, SearchParams
12
+ from meilisearch_python_sdk.models.search import (
13
+ Federation,
14
+ FederationMerged,
15
+ Hybrid,
16
+ MergeFacets,
17
+ SearchParams,
18
+ )
13
19
 
14
20
 
15
21
  def test_basic_search(index_with_documents):
@@ -395,6 +401,32 @@ def test_multi_search_federated(client, index_with_documents, empty_index):
395
401
  assert "_federation" in response.hits[0]
396
402
 
397
403
 
404
+ def test_multi_search_federated_merge_facets(
405
+ client,
406
+ index_with_documents,
407
+ empty_index,
408
+ ):
409
+ index1 = index_with_documents()
410
+ task = index1.update_filterable_attributes(["title"])
411
+ client.wait_for_task(task.task_uid)
412
+ index2 = empty_index()
413
+ federation = FederationMerged(merge_facets=MergeFacets(max_values_per_facet=10))
414
+ federation.facets_by_index = {index1.uid: ["title"]}
415
+ response = client.multi_search(
416
+ [
417
+ SearchParams(index_uid=index1.uid, query="How to Train Your Dragon"),
418
+ SearchParams(index_uid=index2.uid, query=""),
419
+ ],
420
+ federation=federation,
421
+ )
422
+
423
+ assert response.hits[0]["id"] == "166428"
424
+ assert "_formatted" not in response.hits[0]
425
+ assert "_federation" in response.hits[0]
426
+ assert response.facets_by_index is None
427
+ assert response.facet_distribution is not None
428
+
429
+
398
430
  def test_multi_search_locales(client, index_with_documents, empty_index):
399
431
  index1 = index_with_documents()
400
432
  index2 = empty_index()
@@ -533,11 +533,11 @@ wheels = [
533
533
 
534
534
  [[package]]
535
535
  name = "meilisearch-python-sdk"
536
- version = "3.5.0"
536
+ version = "3.5.1"
537
537
  source = { editable = "." }
538
538
  dependencies = [
539
539
  { name = "aiofiles" },
540
- { name = "camel-converter" },
540
+ { name = "camel-converter", extra = ["pydantic"] },
541
541
  { name = "eval-type-backport", marker = "python_full_version < '3.10'" },
542
542
  { name = "httpx", extra = ["http2"] },
543
543
  { name = "pydantic" },
@@ -556,13 +556,13 @@ ujson = [
556
556
  { name = "ujson" },
557
557
  ]
558
558
 
559
- [package.dev-dependencies]
559
+ [package.dependency-groups]
560
560
  dev = [
561
561
  { name = "meilisearch" },
562
562
  { name = "mkdocs" },
563
563
  { name = "mkdocs-material" },
564
564
  { name = "mkdocstrings", extra = ["python"] },
565
- { name = "mypy" },
565
+ { name = "mypy", extra = ["faster-cache"] },
566
566
  { name = "pre-commit" },
567
567
  { name = "pytest" },
568
568
  { name = "pytest-asyncio" },
@@ -578,7 +578,7 @@ dev = [
578
578
  [package.metadata]
579
579
  requires-dist = [
580
580
  { name = "aiofiles", specifier = ">=0.7" },
581
- { name = "camel-converter", specifier = ">=1.0.0" },
581
+ { name = "camel-converter", extras = ["pydantic"], specifier = ">=1.0.0" },
582
582
  { name = "eval-type-backport", marker = "python_full_version < '3.10'", specifier = ">=0.2.0" },
583
583
  { name = "httpx", extras = ["http2"], specifier = ">=0.17" },
584
584
  { name = "orjson", marker = "extra == 'all'" },
@@ -589,13 +589,13 @@ requires-dist = [
589
589
  { name = "ujson", marker = "extra == 'ujson'", specifier = ">=5.10.0" },
590
590
  ]
591
591
 
592
- [package.metadata.requires-dev]
592
+ [package.metadata.dependency-groups]
593
593
  dev = [
594
594
  { name = "meilisearch", specifier = "==0.31.5" },
595
595
  { name = "mkdocs", specifier = "==1.6.0" },
596
596
  { name = "mkdocs-material", specifier = "==9.5.32" },
597
597
  { name = "mkdocstrings", extras = ["python"], specifier = "==0.25.2" },
598
- { name = "mypy", specifier = "==1.11.1" },
598
+ { name = "mypy", extras = ["faster-cache"], specifier = "==1.13.0" },
599
599
  { name = "pre-commit", specifier = "==4.0.0" },
600
600
  { name = "pytest", specifier = "==8.3.2" },
601
601
  { name = "pytest-asyncio", specifier = "==0.24.0" },
@@ -744,36 +744,46 @@ wheels = [
744
744
 
745
745
  [[package]]
746
746
  name = "mypy"
747
- version = "1.11.1"
747
+ version = "1.13.0"
748
748
  source = { registry = "https://pypi.org/simple" }
749
749
  dependencies = [
750
750
  { name = "mypy-extensions" },
751
751
  { name = "tomli", marker = "python_full_version < '3.11'" },
752
752
  { name = "typing-extensions" },
753
753
  ]
754
- sdist = { url = "https://files.pythonhosted.org/packages/b6/9c/a4b3bda53823439cf395db8ecdda6229a83f9bf201714a68a15190bb2919/mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08", size = 3078369 }
755
- wheels = [
756
- { url = "https://files.pythonhosted.org/packages/33/ba/858cc9631c24a349c1c63814edc16448da7d6b8716b2c83a10aa20f5ee89/mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c", size = 10937885 },
757
- { url = "https://files.pythonhosted.org/packages/2d/88/2ae81f7489da8313d0f2043dd657ba847650b00a0fb8e07f40e716ed8c58/mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411", size = 10111978 },
758
- { url = "https://files.pythonhosted.org/packages/df/4b/d211d6036366f9ea5ee9fb949e80d133b4b8496cdde78c7119f518c49734/mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03", size = 12498441 },
759
- { url = "https://files.pythonhosted.org/packages/94/d2/973278d03ad11e006d71d4c858bfe45cf571ae061f3997911925c70a59f0/mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4", size = 13020595 },
760
- { url = "https://files.pythonhosted.org/packages/0b/c2/7f4285eda528883c5c34cb4b8d88080792967f7f7f24256ad8090d303702/mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58", size = 9568307 },
761
- { url = "https://files.pythonhosted.org/packages/0b/b1/62d8ce619493a5364dda4f410912aa12c27126926e8fb8393edca0664640/mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5", size = 10858723 },
762
- { url = "https://files.pythonhosted.org/packages/fe/aa/2ad15a318bc6a17b7f23e1641a624603949904f6131e09681f40340fb875/mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca", size = 10038078 },
763
- { url = "https://files.pythonhosted.org/packages/4d/7f/77feb389d91603f55b3c4e3e16ccf8752bce007ed73ca921e42c9a5dff12/mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de", size = 12420213 },
764
- { url = "https://files.pythonhosted.org/packages/bc/5b/907b4681f68e7ee2e2e88eed65c514cf6406b8f2f83b243ea79bd4eddb97/mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809", size = 12898278 },
765
- { url = "https://files.pythonhosted.org/packages/5b/b3/2a83be637825d7432b8e6a51e45d02de4f463b6c7ec7164a45009a7cf477/mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72", size = 9564438 },
766
- { url = "https://files.pythonhosted.org/packages/3a/34/69638cee2e87303f19a0c35e80d42757e14d9aba328f272fdcdc0bf3c9b8/mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8", size = 10995789 },
767
- { url = "https://files.pythonhosted.org/packages/c4/3c/3e0611348fc53a4a7c80485959478b4f6eae706baf3b7c03cafa22639216/mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a", size = 10002696 },
768
- { url = "https://files.pythonhosted.org/packages/1c/21/a6b46c91b4c9d1918ee59c305f46850cde7cbea748635a352e7c3c8ed204/mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417", size = 12505772 },
769
- { url = "https://files.pythonhosted.org/packages/c4/55/07904d4c8f408e70308015edcbff067eaa77514475938a9dd81b063de2a8/mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e", size = 12954190 },
770
- { url = "https://files.pythonhosted.org/packages/1e/b7/3a50f318979c8c541428c2f1ee973cda813bcc89614de982dafdd0df2b3e/mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525", size = 9663138 },
771
- { url = "https://files.pythonhosted.org/packages/d9/3d/cca659545bd83c67ab784ac2221f8264b3b74e98b2a5aee4f454276ecaf2/mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe", size = 10936143 },
772
- { url = "https://files.pythonhosted.org/packages/83/ff/ec6f1015813adb183925b6f9696062b7fb60b1d60761cc06cea85dd7bcb0/mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c", size = 10105432 },
773
- { url = "https://files.pythonhosted.org/packages/08/a3/ffc2ee9b8689920a524a8013bf05482f51d191d73a8a3939f3d47d9a485a/mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69", size = 12493869 },
774
- { url = "https://files.pythonhosted.org/packages/7b/6b/830fbf3066dcf79831f360c5b1ae3923cfc248aa6a32ea217f179a210126/mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74", size = 13016443 },
775
- { url = "https://files.pythonhosted.org/packages/0a/ae/8ebca638f6bd9e914501a567a56e3ae64fa4d9c8dfff298618e9409d1156/mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b", size = 9567604 },
776
- { url = "https://files.pythonhosted.org/packages/f8/d4/4960d0df55f30a7625d9c3c9414dfd42f779caabae137ef73ffaed0c97b9/mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54", size = 2619257 },
754
+ sdist = { url = "https://files.pythonhosted.org/packages/e8/21/7e9e523537991d145ab8a0a2fd98548d67646dc2aaaf6091c31ad883e7c1/mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e", size = 3152532 }
755
+ wheels = [
756
+ { url = "https://files.pythonhosted.org/packages/5e/8c/206de95a27722b5b5a8c85ba3100467bd86299d92a4f71c6b9aa448bfa2f/mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a", size = 11020731 },
757
+ { url = "https://files.pythonhosted.org/packages/ab/bb/b31695a29eea76b1569fd28b4ab141a1adc9842edde080d1e8e1776862c7/mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80", size = 10184276 },
758
+ { url = "https://files.pythonhosted.org/packages/a5/2d/4a23849729bb27934a0e079c9c1aad912167d875c7b070382a408d459651/mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7", size = 12587706 },
759
+ { url = "https://files.pythonhosted.org/packages/5c/c3/d318e38ada50255e22e23353a469c791379825240e71b0ad03e76ca07ae6/mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f", size = 13105586 },
760
+ { url = "https://files.pythonhosted.org/packages/4a/25/3918bc64952370c3dbdbd8c82c363804678127815febd2925b7273d9482c/mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372", size = 9632318 },
761
+ { url = "https://files.pythonhosted.org/packages/d0/19/de0822609e5b93d02579075248c7aa6ceaddcea92f00bf4ea8e4c22e3598/mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d", size = 10939027 },
762
+ { url = "https://files.pythonhosted.org/packages/c8/71/6950fcc6ca84179137e4cbf7cf41e6b68b4a339a1f5d3e954f8c34e02d66/mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d", size = 10108699 },
763
+ { url = "https://files.pythonhosted.org/packages/26/50/29d3e7dd166e74dc13d46050b23f7d6d7533acf48f5217663a3719db024e/mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b", size = 12506263 },
764
+ { url = "https://files.pythonhosted.org/packages/3f/1d/676e76f07f7d5ddcd4227af3938a9c9640f293b7d8a44dd4ff41d4db25c1/mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73", size = 12984688 },
765
+ { url = "https://files.pythonhosted.org/packages/9c/03/5a85a30ae5407b1d28fab51bd3e2103e52ad0918d1e68f02a7778669a307/mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca", size = 9626811 },
766
+ { url = "https://files.pythonhosted.org/packages/fb/31/c526a7bd2e5c710ae47717c7a5f53f616db6d9097caf48ad650581e81748/mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5", size = 11077900 },
767
+ { url = "https://files.pythonhosted.org/packages/83/67/b7419c6b503679d10bd26fc67529bc6a1f7a5f220bbb9f292dc10d33352f/mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e", size = 10074818 },
768
+ { url = "https://files.pythonhosted.org/packages/ba/07/37d67048786ae84e6612575e173d713c9a05d0ae495dde1e68d972207d98/mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2", size = 12589275 },
769
+ { url = "https://files.pythonhosted.org/packages/1f/17/b1018c6bb3e9f1ce3956722b3bf91bff86c1cefccca71cec05eae49d6d41/mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0", size = 13037783 },
770
+ { url = "https://files.pythonhosted.org/packages/cb/32/cd540755579e54a88099aee0287086d996f5a24281a673f78a0e14dba150/mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2", size = 9726197 },
771
+ { url = "https://files.pythonhosted.org/packages/11/bb/ab4cfdc562cad80418f077d8be9b4491ee4fb257440da951b85cbb0a639e/mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7", size = 11069721 },
772
+ { url = "https://files.pythonhosted.org/packages/59/3b/a393b1607cb749ea2c621def5ba8c58308ff05e30d9dbdc7c15028bca111/mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62", size = 10063996 },
773
+ { url = "https://files.pythonhosted.org/packages/d1/1f/6b76be289a5a521bb1caedc1f08e76ff17ab59061007f201a8a18cc514d1/mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8", size = 12584043 },
774
+ { url = "https://files.pythonhosted.org/packages/a6/83/5a85c9a5976c6f96e3a5a7591aa28b4a6ca3a07e9e5ba0cec090c8b596d6/mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7", size = 13036996 },
775
+ { url = "https://files.pythonhosted.org/packages/b4/59/c39a6f752f1f893fccbcf1bdd2aca67c79c842402b5283563d006a67cf76/mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc", size = 9737709 },
776
+ { url = "https://files.pythonhosted.org/packages/5f/d4/b33ddd40dad230efb317898a2d1c267c04edba73bc5086bf77edeb410fb2/mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc", size = 11013906 },
777
+ { url = "https://files.pythonhosted.org/packages/f4/e6/f414bca465b44d01cd5f4a82761e15044bedd1bf8025c5af3cc64518fac5/mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732", size = 10180657 },
778
+ { url = "https://files.pythonhosted.org/packages/38/e9/fc3865e417722f98d58409770be01afb961e2c1f99930659ff4ae7ca8b7e/mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc", size = 12586394 },
779
+ { url = "https://files.pythonhosted.org/packages/2e/35/f4d8b6d2cb0b3dad63e96caf159419dda023f45a358c6c9ac582ccaee354/mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d", size = 13103591 },
780
+ { url = "https://files.pythonhosted.org/packages/22/1d/80594aef135f921dd52e142fa0acd19df197690bd0cde42cea7b88cf5aa2/mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24", size = 9634690 },
781
+ { url = "https://files.pythonhosted.org/packages/3b/86/72ce7f57431d87a7ff17d442f521146a6585019eb8f4f31b7c02801f78ad/mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a", size = 2647043 },
782
+ ]
783
+
784
+ [package.optional-dependencies]
785
+ faster-cache = [
786
+ { name = "orjson" },
777
787
  ]
778
788
 
779
789
  [[package]]
@@ -1 +0,0 @@
1
- VERSION = "3.5.1"