meilisearch-python-sdk 5.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. meilisearch_python_sdk/__init__.py +8 -0
  2. meilisearch_python_sdk/_batch.py +166 -0
  3. meilisearch_python_sdk/_client.py +2468 -0
  4. meilisearch_python_sdk/_http_requests.py +197 -0
  5. meilisearch_python_sdk/_task.py +368 -0
  6. meilisearch_python_sdk/_utils.py +58 -0
  7. meilisearch_python_sdk/_version.py +1 -0
  8. meilisearch_python_sdk/decorators.py +242 -0
  9. meilisearch_python_sdk/errors.py +75 -0
  10. meilisearch_python_sdk/index/__init__.py +4 -0
  11. meilisearch_python_sdk/index/_common.py +296 -0
  12. meilisearch_python_sdk/index/async_index.py +4891 -0
  13. meilisearch_python_sdk/index/index.py +3839 -0
  14. meilisearch_python_sdk/json_handler.py +74 -0
  15. meilisearch_python_sdk/models/__init__.py +0 -0
  16. meilisearch_python_sdk/models/batch.py +58 -0
  17. meilisearch_python_sdk/models/client.py +97 -0
  18. meilisearch_python_sdk/models/documents.py +12 -0
  19. meilisearch_python_sdk/models/health.py +5 -0
  20. meilisearch_python_sdk/models/index.py +46 -0
  21. meilisearch_python_sdk/models/search.py +126 -0
  22. meilisearch_python_sdk/models/settings.py +197 -0
  23. meilisearch_python_sdk/models/task.py +77 -0
  24. meilisearch_python_sdk/models/version.py +9 -0
  25. meilisearch_python_sdk/models/webhook.py +24 -0
  26. meilisearch_python_sdk/plugins.py +124 -0
  27. meilisearch_python_sdk/py.typed +0 -0
  28. meilisearch_python_sdk/types.py +8 -0
  29. meilisearch_python_sdk-5.5.0.dist-info/METADATA +279 -0
  30. meilisearch_python_sdk-5.5.0.dist-info/RECORD +32 -0
  31. meilisearch_python_sdk-5.5.0.dist-info/WHEEL +4 -0
  32. meilisearch_python_sdk-5.5.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,9 @@
1
+ from datetime import datetime
2
+
3
+ from camel_converter.pydantic_base import CamelBase
4
+
5
+
6
+ class Version(CamelBase):
7
+ commit_sha: str
8
+ commit_date: datetime | str
9
+ pkg_version: str
@@ -0,0 +1,24 @@
1
+ from __future__ import annotations
2
+
3
+ from camel_converter.pydantic_base import CamelBase
4
+
5
+
6
+ class Webhook(CamelBase):
7
+ uuid: str
8
+ url: str
9
+ headers: dict[str, str] | None = None
10
+ is_editable: bool
11
+
12
+
13
+ class Webhooks(CamelBase):
14
+ results: list[Webhook]
15
+
16
+
17
+ class WebhookCreate(CamelBase):
18
+ url: str
19
+ headers: dict[str, str] | None = None
20
+
21
+
22
+ class WebhookUpdate(CamelBase):
23
+ url: str | None = None
24
+ headers: dict[str, str] | None = None
@@ -0,0 +1,124 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Sequence
4
+ from enum import Enum
5
+ from typing import TYPE_CHECKING, Any, NamedTuple, Protocol
6
+
7
+ if TYPE_CHECKING: # pragma: no cover
8
+ from meilisearch_python_sdk.models.search import FacetSearchResults, SearchResults
9
+ from meilisearch_python_sdk.models.task import TaskInfo
10
+ from meilisearch_python_sdk.types import JsonDict, JsonMapping
11
+
12
+
13
+ class AsyncEvent(Enum):
14
+ PRE = "pre"
15
+ CONCURRENT = "concurrent"
16
+ POST = "post"
17
+
18
+
19
+ class Event(Enum):
20
+ PRE = "pre"
21
+ POST = "post"
22
+
23
+
24
+ class AsyncPlugin(Protocol):
25
+ CONCURRENT_EVENT: bool
26
+ POST_EVENT: bool
27
+ PRE_EVENT: bool
28
+
29
+ async def run_plugin(
30
+ self, event: AsyncEvent, **kwargs: Any
31
+ ) -> (
32
+ None | list[JsonDict] | TaskInfo | list[TaskInfo] | SearchResults | FacetSearchResults
33
+ ): # pragma: no cover
34
+ ...
35
+
36
+
37
+ class AsyncDocumentPlugin(Protocol):
38
+ CONCURRENT_EVENT: bool
39
+ POST_EVENT: bool
40
+ PRE_EVENT: bool
41
+
42
+ async def run_document_plugin(
43
+ self,
44
+ event: AsyncEvent,
45
+ *,
46
+ documents: Sequence[JsonMapping],
47
+ primary_key: str | None,
48
+ **kwargs: Any,
49
+ ) -> Sequence[JsonMapping] | None: # pragma: no cover
50
+ ...
51
+
52
+
53
+ class AsyncPostSearchPlugin(Protocol):
54
+ CONCURRENT_EVENT: bool
55
+ POST_EVENT: bool
56
+ PRE_EVENT: bool
57
+
58
+ async def run_post_search_plugin(
59
+ self,
60
+ event: AsyncEvent,
61
+ *,
62
+ search_results: SearchResults,
63
+ **kwargs: Any,
64
+ ) -> SearchResults | None: # pragma: no cover
65
+ ...
66
+
67
+
68
+ class Plugin(Protocol):
69
+ POST_EVENT: bool
70
+ PRE_EVENT: bool
71
+
72
+ def run_plugin(
73
+ self, event: Event, **kwargs: Any
74
+ ) -> (
75
+ None | list[JsonDict] | TaskInfo | list[TaskInfo] | SearchResults | FacetSearchResults
76
+ ): # pragma: no cover
77
+ ...
78
+
79
+
80
+ class DocumentPlugin(Protocol):
81
+ POST_EVENT: bool
82
+ PRE_EVENT: bool
83
+
84
+ def run_document_plugin(
85
+ self,
86
+ event: Event,
87
+ *,
88
+ documents: Sequence[JsonMapping],
89
+ primary_key: str | None,
90
+ **kwargs: Any,
91
+ ) -> Sequence[JsonMapping] | None: # pragma: no cover
92
+ ...
93
+
94
+
95
+ class PostSearchPlugin(Protocol):
96
+ POST_EVENT: bool
97
+ PRE_EVENT: bool
98
+
99
+ def run_post_search_plugin(
100
+ self, event: Event, *, search_results: SearchResults, **kwargs: Any
101
+ ) -> SearchResults | None: # pragma: no cover
102
+ ...
103
+
104
+
105
+ class AsyncIndexPlugins(NamedTuple):
106
+ add_documents_plugins: Sequence[AsyncPlugin | AsyncDocumentPlugin] | None = None
107
+ delete_all_documents_plugins: Sequence[AsyncPlugin] | None = None
108
+ delete_document_plugins: Sequence[AsyncPlugin] | None = None
109
+ delete_documents_plugins: Sequence[AsyncPlugin] | None = None
110
+ delete_documents_by_filter_plugins: Sequence[AsyncPlugin] | None = None
111
+ facet_search_plugins: Sequence[AsyncPlugin] | None = None
112
+ search_plugins: Sequence[AsyncPlugin | AsyncPostSearchPlugin] | None = None
113
+ update_documents_plugins: Sequence[AsyncPlugin | AsyncDocumentPlugin] | None = None
114
+
115
+
116
+ class IndexPlugins(NamedTuple):
117
+ add_documents_plugins: Sequence[Plugin | DocumentPlugin] | None = None
118
+ delete_all_documents_plugins: Sequence[Plugin] | None = None
119
+ delete_document_plugins: Sequence[Plugin] | None = None
120
+ delete_documents_plugins: Sequence[Plugin] | None = None
121
+ delete_documents_by_filter_plugins: Sequence[Plugin] | None = None
122
+ facet_search_plugins: Sequence[Plugin] | None = None
123
+ search_plugins: Sequence[Plugin | PostSearchPlugin] | None = None
124
+ update_documents_plugins: Sequence[Plugin | DocumentPlugin] | None = None
File without changes
@@ -0,0 +1,8 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import MutableMapping
4
+ from typing import Any, TypeAlias
5
+
6
+ Filter: TypeAlias = str | list[str | list[str]]
7
+ JsonDict: TypeAlias = dict[str, Any]
8
+ JsonMapping: TypeAlias = MutableMapping[str, Any]
@@ -0,0 +1,279 @@
1
+ Metadata-Version: 2.4
2
+ Name: meilisearch-python-sdk
3
+ Version: 5.5.0
4
+ Summary: A Python client providing both async and sync support for the Meilisearch API
5
+ Project-URL: repository, https://github.com/sanders41/meilisearch-python-sdk
6
+ Project-URL: homepage, https://github.com/sanders41/meilisearch-python-sdk
7
+ Project-URL: documentation, https://meilisearch-python-sdk.paulsanders.dev
8
+ Author-email: Paul Sanders <paul@paulsanders.dev>
9
+ License: MIT License
10
+
11
+ Copyright (c) 2021 Paul Sanders
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ of this software and associated documentation files (the "Software"), to deal
15
+ in the Software without restriction, including without limitation the rights
16
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ copies of the Software, and to permit persons to whom the Software is
18
+ furnished to do so, subject to the following conditions:
19
+
20
+ The above copyright notice and this permission notice shall be included in all
21
+ copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ SOFTWARE.
30
+ License-File: LICENSE
31
+ Keywords: async,client,meilisearch,python,sdk
32
+ Classifier: Development Status :: 5 - Production/Stable
33
+ Classifier: Intended Audience :: Developers
34
+ Classifier: License :: OSI Approved :: MIT License
35
+ Classifier: Operating System :: OS Independent
36
+ Classifier: Programming Language :: Python :: 3.10
37
+ Classifier: Programming Language :: Python :: 3.11
38
+ Classifier: Programming Language :: Python :: 3.12
39
+ Classifier: Programming Language :: Python :: 3.13
40
+ Classifier: Programming Language :: Python :: 3.14
41
+ Classifier: Typing :: Typed
42
+ Requires-Python: >=3.10
43
+ Requires-Dist: aiofiles>=0.7
44
+ Requires-Dist: camel-converter[pydantic]>=1.0.0
45
+ Requires-Dist: httpx[http2]>=0.17
46
+ Requires-Dist: pydantic>=2.0.0
47
+ Requires-Dist: pyjwt>=2.3.0
48
+ Provides-Extra: all
49
+ Requires-Dist: orjson; extra == 'all'
50
+ Requires-Dist: ujson; extra == 'all'
51
+ Provides-Extra: orjson
52
+ Requires-Dist: orjson>=3.10.6; extra == 'orjson'
53
+ Provides-Extra: ujson
54
+ Requires-Dist: ujson>=5.10.0; extra == 'ujson'
55
+ Description-Content-Type: text/markdown
56
+
57
+ # Meilisearch Python SDK
58
+
59
+ [![Tests Status](https://github.com/sanders41/meilisearch-python-sdk/actions/workflows/testing.yml/badge.svg?branch=main&event=push)](https://github.com/sanders41/meilisearch-python-sdk/actions?query=workflow%3ATesting+branch%3Amain+event%3Apush)
60
+ [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/sanders41/meilisearch-python-sdk/main.svg)](https://results.pre-commit.ci/latest/github/sanders41/meilisearch-python-sdk/main)
61
+ [![Coverage](https://codecov.io/github/sanders41/meilisearch-python-sdk/coverage.svg?branch=main)](https://codecov.io/gh/sanders41/meilisearch-python-sdk)
62
+ [![PyPI version](https://badge.fury.io/py/meilisearch-python-sdk.svg)](https://badge.fury.io/py/meilisearch-python-sdk)
63
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/meilisearch-python-sdk?color=5cc141)](https://github.com/sanders41/meilisearch-python-sdk)
64
+
65
+ Meilisearch Python SDK provides both an async and sync client for the
66
+ [Meilisearch](https://github.com/meilisearch/meilisearch) API.
67
+
68
+ Which client to use depends on your use case. If the code base you are working with uses asyncio,
69
+ for example if you are using [FastAPI](https://fastapi.tiangolo.com/), choose the `AsyncClient`,
70
+ otherwise choose the sync `Client`. The functionality of the two clients is the same, the difference
71
+ being that the `AsyncClient` provides async methods and uses the `AsyncIndex` with its own
72
+ additional async methods. On the other hand, `Client` provides blocking methods and uses the `Index`
73
+ with its own blocking methods.
74
+
75
+ ## Installation
76
+
77
+ Using a virtual environment is recommended for installing this package. Once the virtual
78
+ environment is created and activated, install the package with:
79
+
80
+ ```sh
81
+ pip install meilisearch-python-sdk
82
+ ```
83
+
84
+ ## Run Meilisearch
85
+
86
+ There are several ways to
87
+ [run Meilisearch](https://www.meilisearch.com/docs/learn/getting_started/installation).
88
+ Pick the one that works best for your use case and then start the server.
89
+
90
+ As as example to use Docker:
91
+
92
+ ```sh
93
+ docker pull getmeili/meilisearch:latest
94
+ docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest ./meilisearch --master-key=masterKey
95
+ ```
96
+
97
+ ## Usage
98
+
99
+ ### Add Documents
100
+
101
+ #### AsyncClient
102
+
103
+ - Note: `client.index("books") creates an instance of an AsyncIndex object but does not make a
104
+ network call to send the data yet so it does not need to be awaited.
105
+
106
+ ```py
107
+ from meilisearch_python_sdk import AsyncClient
108
+
109
+ async with AsyncClient('http://127.0.0.1:7700', 'masterKey') as client:
110
+ index = client.index("books")
111
+
112
+ documents = [
113
+ {"id": 1, "title": "Ready Player One"},
114
+ {"id": 42, "title": "The Hitchhiker's Guide to the Galaxy"},
115
+ ]
116
+
117
+ await index.add_documents(documents)
118
+ ```
119
+
120
+ #### Client
121
+
122
+ ```py
123
+ from meilisearch_python_sdk import Client
124
+
125
+ with Client('http://127.0.0.1:7700', 'masterKey') as client:
126
+ index = client.index("books")
127
+
128
+ documents = [
129
+ {"id": 1, "title": "Ready Player One"},
130
+ {"id": 42, "title": "The Hitchhiker's Guide to the Galaxy"},
131
+ ]
132
+
133
+ index.add_documents(documents)
134
+ ```
135
+
136
+ The server will return an update id that can be used to
137
+ [get the status](https://www.meilisearch.com/docs/reference/api/tasks#status)
138
+ of the updates. To do this you would save the result response from adding the documents to a
139
+ variable, this will be an `UpdateId` object, and use it to check the status of the updates.
140
+
141
+ #### AsyncClient
142
+
143
+ ```py
144
+ task = await index.add_documents([{"id": 1, "title": "test"}])
145
+ status = await client.get_task(task.task_uid)
146
+ ```
147
+
148
+ #### Client
149
+
150
+ ```py
151
+ task = index.add_documents([{"id": 1, "title": "test"}])
152
+ status = client.get_task(task.task_uid)
153
+ ```
154
+
155
+ ### Basic Searching
156
+
157
+ #### AsyncClient
158
+
159
+ ```py
160
+ search_result = await index.search("ready player")
161
+ ```
162
+
163
+ #### Client
164
+
165
+ ```py
166
+ search_result = index.search("ready player")
167
+ ```
168
+
169
+ ### Base Search Results: SearchResults object with values
170
+
171
+ ```py
172
+ SearchResults(
173
+ hits = [
174
+ {
175
+ "id": 1,
176
+ "title": "Ready Player One",
177
+ },
178
+ ],
179
+ offset = 0,
180
+ limit = 20,
181
+ nb_hits = 1,
182
+ exhaustive_nb_hits = bool,
183
+ facets_distributionn = None,
184
+ processing_time_ms = 1,
185
+ query = "ready player",
186
+ )
187
+ ```
188
+
189
+ ### Custom Search
190
+
191
+ Information about the parameters can be found in the
192
+ [search parameters](https://docs.meilisearch.com/reference/features/search_parameters.html) section
193
+ of the documentation.
194
+
195
+ #### AsyncClient
196
+
197
+ ```py
198
+ await index.search(
199
+ "guide",
200
+ attributes_to_highlight=["title"],
201
+ filters="book_id > 10"
202
+ )
203
+ ```
204
+
205
+ #### Client
206
+
207
+ ```py
208
+ index.search(
209
+ "guide",
210
+ attributes_to_highlight=["title"],
211
+ filters="book_id > 10"
212
+ )
213
+ ```
214
+
215
+ ### Custom Search Results: SearchResults object with values
216
+
217
+ ```py
218
+ SearchResults(
219
+ hits = [
220
+ {
221
+ "id": 42,
222
+ "title": "The Hitchhiker's Guide to the Galaxy",
223
+ "_formatted": {
224
+ "id": 42,
225
+ "title": "The Hitchhiker's Guide to the <em>Galaxy</em>"
226
+ }
227
+ },
228
+ ],
229
+ offset = 0,
230
+ limit = 20,
231
+ nb_hits = 1,
232
+ exhaustive_nb_hits = bool,
233
+ facets_distributionn = None,
234
+ processing_time_ms = 5,
235
+ query = "galaxy",
236
+ )
237
+ ```
238
+
239
+ ## Benchmark
240
+
241
+ The following benchmarks compare this library to the official
242
+ [Meilisearch Python](https://github.com/meilisearch/meilisearch-python) library. Note that all
243
+ of the performance gains seen with the `AsyncClient` are achieved by taking advantage of asyncio.
244
+ This means that if your code is not taking advantage of asyncio or it does not block the event loop,
245
+ the gains here will not be seen and the performance between the clients will be very similar.
246
+
247
+ ### Add Documents in Batches
248
+
249
+ This test compares how long it takes to send 1 million documents in batches of 1 thousand to the
250
+ Meilisearch server for indexing (lower is better). The time does not take into account how long
251
+ Meilisearch takes to index the documents since that is outside of the library functionality.
252
+
253
+ ![Add Documents in Batches](https://raw.githubusercontent.com/sanders41/meilisearch-python-sdk/main/assets/add_in_batches.png)
254
+
255
+ ### Multiple Searches
256
+
257
+ This test compares how long it takes to complete 1000 searches (lower is better)
258
+
259
+ ![Multiple Searches](https://raw.githubusercontent.com/sanders41/meilisearch-python-sdk/main/assets/searches.png)
260
+
261
+ ### Independent testing
262
+
263
+ [Prashanth Rao](https://github.com/prrao87) did some independent testing and found this async client
264
+ to be ~30% faster than the sync client for data ingestion. You can find a good write-up of the
265
+ results how he tested them in his [blog post](https://thedataquarry.com/posts/meilisearch-async/).
266
+
267
+ ## Testing
268
+
269
+ [pytest-meilisearch](https://github.com/sanders41/pytest-meilisearch) is a pytest plugin that can
270
+ help with testing your code. It provides a lot of the boiler plate code you will need.
271
+
272
+ ## Documentation
273
+
274
+ See our [docs](https://meilisearch-python-sdk.paulsanders.dev) for the full documentation.
275
+
276
+ ## Contributing
277
+
278
+ Contributions to this project are welcome. If you are interested in contributing please see our
279
+ [contributing guide](CONTRIBUTING.md)
@@ -0,0 +1,32 @@
1
+ meilisearch_python_sdk/__init__.py,sha256=SB0Jlm6FwT13J9xasZKseZzTWBk0hkfe1CWyWmIIZnE,258
2
+ meilisearch_python_sdk/_batch.py,sha256=Hbt-M8Lt8ZDZqcKToUMzUd5zvT-gku709er4pRlvXWk,5065
3
+ meilisearch_python_sdk/_client.py,sha256=_hEcFLbt8F2IadFaGMU9jAlAuelw1eMiAULDrbBKd8I,95566
4
+ meilisearch_python_sdk/_http_requests.py,sha256=9NMTKrJDFpdWZKPLNGlRQ54EtqhPXlhov3EoeR3VrwU,6773
5
+ meilisearch_python_sdk/_task.py,sha256=vZuBozL0qQDJBwEGgq6mrmYjJPBNi_NzCMk_uql0tsA,12485
6
+ meilisearch_python_sdk/_utils.py,sha256=NoCDxJPhjABeuSxFTNCih585UDWdXEUBD_FvdgtScQw,1539
7
+ meilisearch_python_sdk/_version.py,sha256=ds5syOHDBbzfjd9EvTjYcNNffSC3N5Io68elHur19F0,18
8
+ meilisearch_python_sdk/decorators.py,sha256=6v630usrbHS8KFxgEI1U_STo3QWDnwGzOnbq7NPGp_0,8703
9
+ meilisearch_python_sdk/errors.py,sha256=RNNHXtXLBiCVZaLM2MeKKs9RbRuE-SLRttiPeVAEXgA,2133
10
+ meilisearch_python_sdk/json_handler.py,sha256=c1rGKzYlE0dGfLygQjPqVUNfQkN1JvafBGmIx31JW8g,2044
11
+ meilisearch_python_sdk/plugins.py,sha256=YySzTuVr4IrogTgrP8q-gZPsew8TwedopjWnTj5eV48,3607
12
+ meilisearch_python_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ meilisearch_python_sdk/types.py,sha256=-A3WB73EKUCBOOaeqVS_S9_1-QgtjAjl-3v_2XRfpF0,249
14
+ meilisearch_python_sdk/index/__init__.py,sha256=sULiCF_Gqa66SDLuyvlHQ1NW-6ch5sWU6UNZ572sdEA,152
15
+ meilisearch_python_sdk/index/_common.py,sha256=3OtndcUg7z36aFJSTqaBnK4f56DUQ3ip2DM11cZybMo,9337
16
+ meilisearch_python_sdk/index/async_index.py,sha256=y_EI-Hxzd43qVtOY-yVElOc6mC-qRhLVd90zP3eqWsI,205349
17
+ meilisearch_python_sdk/index/index.py,sha256=QIQmKvPLUDcbiFyHfZjL2ZhQl4lPKBhu3rHIltELWfU,153861
18
+ meilisearch_python_sdk/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ meilisearch_python_sdk/models/batch.py,sha256=PYnJxCB_rvOaGM4Z-EFgxHqTaFct_s8djlCXkaa1V8k,1613
20
+ meilisearch_python_sdk/models/client.py,sha256=nefi6ViSaSd_mtopRAhM9tzzepwChFJUkGTXPAr4RY8,2756
21
+ meilisearch_python_sdk/models/documents.py,sha256=eT3FHrPND-g2IzNRyOHQApTTJ1WbFcGlqgxZ6aKrRgI,247
22
+ meilisearch_python_sdk/models/health.py,sha256=hvruti7ylsk7bAh8RPOhTPcRrjx6MPgdkDFX9vZ5Qks,95
23
+ meilisearch_python_sdk/models/index.py,sha256=WLQOi3_HChko134FkRU1H3_cJjhHJCFclcx4oDBlqHU,1228
24
+ meilisearch_python_sdk/models/search.py,sha256=U3ph1GW9Xkbw33pIlGDa7rlTGsdvqahjRJjPxUou8n8,3581
25
+ meilisearch_python_sdk/models/settings.py,sha256=eh0xnro4D_sj8ck2nifa3tBdf2_7RcZlAY_zQhfsY0s,5730
26
+ meilisearch_python_sdk/models/task.py,sha256=bMFN_oloEcpIlEp_suPGRlZ1io35JP_9y7_1zqaOJJg,2252
27
+ meilisearch_python_sdk/models/version.py,sha256=ISU-ZHgpXLBFDuMpWWfKdVo9Dq1HcD7s6HFnCiGTF8Y,184
28
+ meilisearch_python_sdk/models/webhook.py,sha256=zSkEJJdEflinW3_seJTLQ_ZWs4w-pjTD3SS1ZawC32k,455
29
+ meilisearch_python_sdk-5.5.0.dist-info/METADATA,sha256=0cEHjvwINSidAhpB3-Q10DvB6S_xVusXtFbgMJ5kQCg,9729
30
+ meilisearch_python_sdk-5.5.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
31
+ meilisearch_python_sdk-5.5.0.dist-info/licenses/LICENSE,sha256=xVzevI1TrlKfM0plmJ7vfK1Muu0V9n-dGE8RnDrOFlM,1069
32
+ meilisearch_python_sdk-5.5.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.27.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Paul Sanders
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.