meilisearch-python-sdk 7.1.4__py3-none-any.whl → 7.2.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.
@@ -10,8 +10,8 @@ from meilisearch_python_sdk.errors import BatchNotFoundError, MeilisearchApiErro
10
10
  from meilisearch_python_sdk.models.batch import BatchResult, BatchStatus
11
11
 
12
12
  if TYPE_CHECKING:
13
- from httpx import AsyncClient as HttpxAsyncClient # pragma: no cover
14
- from httpx import Client as HttpxClient # pragma: no cover
13
+ from httpx2 import AsyncClient as HttpxAsyncClient # pragma: no cover
14
+ from httpx2 import Client as HttpxClient # pragma: no cover
15
15
 
16
16
  from meilisearch_python_sdk._client import ( # pragma: no cover
17
17
  AsyncClient,
@@ -1,10 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from datetime import datetime
4
- from typing import TYPE_CHECKING, Any
4
+ from typing import TYPE_CHECKING, Any, Literal
5
5
 
6
6
  from camel_converter import dict_to_camel
7
- from httpx import AsyncClient as HttpxAsyncClient
7
+ from httpx2 import AsyncClient as HttpxAsyncClient
8
8
 
9
9
  from meilisearch_python_sdk import _task
10
10
  from meilisearch_python_sdk._batch import async_get_batch, async_get_batches
@@ -501,9 +501,22 @@ class AsyncClient(BaseClient):
501
501
  hits_type=hits_type,
502
502
  )
503
503
 
504
- async def get_all_stats(self) -> ClientStats:
504
+ async def get_all_stats(
505
+ self,
506
+ *,
507
+ show_internal_database_sizes: bool = False,
508
+ size_format: Literal["human", "raw"] | None = None,
509
+ ) -> ClientStats:
505
510
  """Get stats for all indexes.
506
511
 
512
+ Args:
513
+ show_internal_database_sizes: Include internal database size inforamation in results.
514
+ Default = False.
515
+ size_format: When present and set to human, then all database sizes in responses of the
516
+ stat routes will be returned as a string containing an appropriate unit (MiB, GiB,
517
+ etc). When missing or set to raw, then the current behavior of expressing the size
518
+ in bytes as a number is retained. Default = None
519
+
507
520
  Returns:
508
521
  Information about database size and all indexes.
509
522
 
@@ -516,7 +529,16 @@ class AsyncClient(BaseClient):
516
529
  >>> async with AsyncClient("http://localhost.com", "masterKey") as client:
517
530
  >>> stats = await client.get_all_stats()
518
531
  """
519
- response = await self._http_requests.get("stats")
532
+ url = "stats"
533
+
534
+ if show_internal_database_sizes:
535
+ url = f"{url}?showInternalDatabaseSizes=true"
536
+ if size_format:
537
+ url = f"{url}&sizeFormat={size_format}"
538
+ elif not show_internal_database_sizes and size_format:
539
+ url = f"{url}?sizeFormat={size_format}"
540
+
541
+ response = await self._http_requests.get(url)
520
542
 
521
543
  return ClientStats(**self._http_requests.parse_json(response))
522
544
 
@@ -3,8 +3,7 @@ from __future__ import annotations
3
3
  from datetime import datetime, timezone
4
4
  from typing import TYPE_CHECKING
5
5
 
6
- import jwt
7
-
6
+ from meilisearch_python_sdk._utils import encode_jwt
8
7
  from meilisearch_python_sdk.errors import InvalidRestriction
9
8
  from meilisearch_python_sdk.json_handler import BuiltinHandler, OrjsonHandler
10
9
  from meilisearch_python_sdk.models.client import (
@@ -101,4 +100,4 @@ class BaseClient:
101
100
 
102
101
  payload["exp"] = int(datetime.timestamp(expires_at))
103
102
 
104
- return jwt.encode(payload, api_key.key, algorithm="HS256")
103
+ return encode_jwt(payload=payload, key=api_key.key, json_handler=self.json_handler)
@@ -1,10 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from datetime import datetime
4
- from typing import TYPE_CHECKING, Any
4
+ from typing import TYPE_CHECKING, Any, Literal
5
5
 
6
6
  from camel_converter import dict_to_camel
7
- from httpx import Client as HttpxClient
7
+ from httpx2 import Client as HttpxClient
8
8
 
9
9
  from meilisearch_python_sdk import _task
10
10
  from meilisearch_python_sdk._batch import get_batch as _get_batch
@@ -505,9 +505,22 @@ class Client(BaseClient):
505
505
  hits_type=hits_type,
506
506
  )
507
507
 
508
- def get_all_stats(self) -> ClientStats:
508
+ def get_all_stats(
509
+ self,
510
+ *,
511
+ show_internal_database_sizes: bool = False,
512
+ size_format: Literal["human", "raw"] | None = None,
513
+ ) -> ClientStats:
509
514
  """Get stats for all indexes.
510
515
 
516
+ Args:
517
+ show_internal_database_sizes: Include internal database size inforamation in results.
518
+ Default = False.
519
+ size_format: When present and set to human, then all database sizes in responses of the
520
+ stat routes will be returned as a string containing an appropriate unit (MiB, GiB,
521
+ etc). When missing or set to raw, then the current behavior of expressing the size
522
+ in bytes as a number is retained. Default = None
523
+
511
524
  Returns:
512
525
  Information about database size and all indexes.
513
526
 
@@ -520,7 +533,16 @@ class Client(BaseClient):
520
533
  >>> with Client("http://localhost.com", "masterKey") as client:
521
534
  >>> stats = client.get_all_stats()
522
535
  """
523
- response = self._http_requests.get("stats")
536
+ url = "stats"
537
+
538
+ if show_internal_database_sizes:
539
+ url = f"{url}?showInternalDatabaseSizes=true"
540
+ if size_format:
541
+ url = f"{url}&sizeFormat={size_format}"
542
+ elif not show_internal_database_sizes and size_format:
543
+ url = f"{url}?sizeFormat={size_format}"
544
+
545
+ response = self._http_requests.get(url)
524
546
 
525
547
  return ClientStats(**self._http_requests.parse_json(response))
526
548
 
@@ -4,7 +4,7 @@ import gzip
4
4
  from functools import lru_cache
5
5
  from typing import TYPE_CHECKING, Any
6
6
 
7
- from httpx import (
7
+ from httpx2 import (
8
8
  AsyncClient,
9
9
  Client,
10
10
  ConnectError,
@@ -6,8 +6,8 @@ from datetime import datetime
6
6
  from typing import TYPE_CHECKING
7
7
  from urllib.parse import urlencode
8
8
 
9
- from httpx import AsyncClient as HttpxAsyncClient
10
- from httpx import Client as HttpxClient
9
+ from httpx2 import AsyncClient as HttpxAsyncClient
10
+ from httpx2 import Client as HttpxClient
11
11
 
12
12
  from meilisearch_python_sdk._http_requests import AsyncHttpRequests, HttpRequests
13
13
  from meilisearch_python_sdk._utils import get_async_client, get_client
@@ -1,14 +1,31 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import base64
4
+ import hashlib
5
+ import hmac
3
6
  import sys
7
+ from calendar import timegm
8
+ from datetime import datetime, timezone
4
9
  from functools import lru_cache
5
10
  from typing import TYPE_CHECKING
6
11
 
7
- from httpx import AsyncClient as HttpxAsyncClient
8
- from httpx import Client as HttpxClient
12
+ from httpx2 import AsyncClient as HttpxAsyncClient
13
+ from httpx2 import Client as HttpxClient
14
+
15
+ from meilisearch_python_sdk.errors import (
16
+ DecodeError,
17
+ ExpiredSignatureError,
18
+ ImmatureSignatureError,
19
+ InvalidIssuedAtError,
20
+ InvalidJTIError,
21
+ InvalidSignatureError,
22
+ InvalidSubjectError,
23
+ )
24
+ from meilisearch_python_sdk.json_handler import BuiltinHandler, OrjsonHandler
9
25
 
10
26
  if TYPE_CHECKING:
11
- from meilisearch_python_sdk._client import AsyncClient, Client # pragma: no cover
27
+ from meilisearch_python_sdk._client import AsyncClient, Client
28
+ from meilisearch_python_sdk.types import JsonDict
12
29
 
13
30
 
14
31
  def get_async_client(
@@ -32,3 +49,87 @@ def get_client(
32
49
  @lru_cache(maxsize=1)
33
50
  def use_task_groups() -> bool:
34
51
  return True if sys.version_info >= (3, 11) else False
52
+
53
+
54
+ def _jwt_b64encode(data: bytes) -> str:
55
+ return base64.urlsafe_b64encode(data).rstrip(b"=").decode()
56
+
57
+
58
+ def encode_jwt(*, payload: JsonDict, key: str, json_handler: BuiltinHandler | OrjsonHandler) -> str:
59
+ if not isinstance(payload, dict):
60
+ raise TypeError("Expecting a dict object, as JWT only supports JSON objects as payloads.")
61
+
62
+ payload = payload.copy()
63
+
64
+ for time_claim in ("exp", "iat", "nbf"):
65
+ if isinstance(payload.get(time_claim), datetime):
66
+ payload[time_claim] = timegm(payload[time_claim].utctimetuple())
67
+
68
+ if "iss" in payload and not isinstance(payload["iss"], str):
69
+ raise TypeError("Issuer (iss) must be a string.")
70
+
71
+ typ = "secevent+jwt" if "events" in payload else "JWT"
72
+ header = _jwt_b64encode(json_handler.dump_bytes({"alg": "HS256", "typ": typ}))
73
+ body = _jwt_b64encode(json_handler.dump_bytes(payload))
74
+ message = f"{header}.{body}"
75
+ sig = _jwt_b64encode(hmac.new(key.encode(), message.encode(), hashlib.sha256).digest())
76
+
77
+ return f"{message}.{sig}"
78
+
79
+
80
+ def decode_jwt(
81
+ *, token: str, key: str, json_handler: BuiltinHandler | OrjsonHandler, leeway: float = 0
82
+ ) -> JsonDict:
83
+ header_b64, payload_b64, sig_b64 = token.split(".")
84
+ message = f"{header_b64}.{payload_b64}"
85
+ expected = _jwt_b64encode(hmac.new(key.encode(), message.encode(), hashlib.sha256).digest())
86
+
87
+ if not hmac.compare_digest(sig_b64, expected):
88
+ raise InvalidSignatureError("Signature verification failed")
89
+
90
+ padding = "=" * (4 - len(payload_b64) % 4)
91
+
92
+ try:
93
+ payload = json_handler.loads(base64.urlsafe_b64decode(payload_b64 + padding))
94
+ except Exception as e:
95
+ raise DecodeError(f"Invalid payload string: {e}") from e
96
+
97
+ if not isinstance(payload, dict):
98
+ raise DecodeError("Invalid payload string: must be a json object")
99
+
100
+ now = datetime.now(tz=timezone.utc).timestamp()
101
+
102
+ if "iat" in payload:
103
+ try:
104
+ iat = int(payload["iat"])
105
+ except (ValueError, TypeError):
106
+ raise InvalidIssuedAtError("Issued At claim (iat) must be an integer.") from None
107
+
108
+ if iat > (now + leeway):
109
+ raise ImmatureSignatureError("The token is not yet valid (iat)")
110
+
111
+ if "nbf" in payload:
112
+ try:
113
+ nbf = int(payload["nbf"])
114
+ except (ValueError, TypeError):
115
+ raise DecodeError("Not Before claim (nbf) must be an integer.") from None
116
+
117
+ if nbf > (now + leeway):
118
+ raise ImmatureSignatureError("The token is not yet valid (nbf)")
119
+
120
+ if "exp" in payload:
121
+ try:
122
+ exp = int(payload["exp"])
123
+ except (ValueError, TypeError):
124
+ raise DecodeError("Expiration Time claim (exp) must be an integer.") from None
125
+
126
+ if exp <= (now - leeway):
127
+ raise ExpiredSignatureError("Signature has expired")
128
+
129
+ if "sub" in payload and not isinstance(payload["sub"], str):
130
+ raise InvalidSubjectError("Subject must be a string")
131
+
132
+ if "jti" in payload and not isinstance(payload["jti"], str):
133
+ raise InvalidJTIError("JWT ID must be a string")
134
+
135
+ return payload
@@ -1 +1 @@
1
- VERSION = "7.1.4"
1
+ VERSION = "7.2.0"
@@ -1,4 +1,4 @@
1
- from httpx import Response
1
+ from httpx2 import Response
2
2
 
3
3
 
4
4
  class BatchNotFoundError(Exception):
@@ -74,3 +74,51 @@ class PayloadTooLarge(Exception):
74
74
  """Error when the payload is larger than the allowed payload size."""
75
75
 
76
76
  pass
77
+
78
+
79
+ class InvalidTokenError(Exception):
80
+ """Base exception when ``decode()`` fails on a token"""
81
+
82
+ pass
83
+
84
+
85
+ class DecodeError(InvalidTokenError):
86
+ """Raised when a token cannot be decoded because it failed validation"""
87
+
88
+ pass
89
+
90
+
91
+ class InvalidIssuedAtError(InvalidTokenError):
92
+ """Raised when a token's ``iat`` claim is non-numeric"""
93
+
94
+ pass
95
+
96
+
97
+ class InvalidSignatureError(DecodeError):
98
+ """Raised when a token's signature doesn't match the one provided as part of the token."""
99
+
100
+ pass
101
+
102
+
103
+ class ImmatureSignatureError(InvalidTokenError):
104
+ """Raised when a token's ``nbf`` or ``iat`` claims represent a time in the future"""
105
+
106
+ pass
107
+
108
+
109
+ class ExpiredSignatureError(InvalidTokenError):
110
+ """Raised when a token's ``exp`` claim indicates it has expired"""
111
+
112
+ pass
113
+
114
+
115
+ class InvalidSubjectError(InvalidTokenError):
116
+ """Raised when a token's ``sub`` claim is not a string"""
117
+
118
+ pass
119
+
120
+
121
+ class InvalidJTIError(InvalidTokenError):
122
+ """Raised when a token's ``jti`` claim is not a string"""
123
+
124
+ pass
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any, Literal
9
9
 
10
10
  import aiofiles
11
11
  from camel_converter import to_snake
12
- from httpx import AsyncClient
12
+ from httpx2 import AsyncClient
13
13
 
14
14
  from meilisearch_python_sdk._http_requests import AsyncHttpRequests
15
15
  from meilisearch_python_sdk._task import async_wait_for_task
@@ -521,9 +521,22 @@ class AsyncIndex(BaseIndex):
521
521
 
522
522
  return index
523
523
 
524
- async def get_stats(self) -> IndexStats:
524
+ async def get_stats(
525
+ self,
526
+ *,
527
+ show_internal_database_sizes: bool = False,
528
+ size_format: Literal["human", "raw"] | None = None,
529
+ ) -> IndexStats:
525
530
  """Get stats of the index.
526
531
 
532
+ Args:
533
+ show_internal_database_sizes: Include internal database size inforamation in results.
534
+ Default = False.
535
+ size_format: When present and set to human, then all database sizes in responses of the
536
+ stat routes will be returned as a string containing an appropriate unit (MiB, GiB,
537
+ etc). When missing or set to raw, then the current behavior of expressing the size
538
+ in bytes as a number is retained. Default = None
539
+
527
540
  Returns:
528
541
  Stats of the index.
529
542
 
@@ -537,7 +550,15 @@ class AsyncIndex(BaseIndex):
537
550
  >>> index = client.index("movies")
538
551
  >>> stats = await index.get_stats()
539
552
  """
540
- response = await self._http_requests.get(self._stats_url)
553
+ url = self._stats_url
554
+ if show_internal_database_sizes:
555
+ url = f"{url}?showInternalDatabaseSizes=true"
556
+ if size_format:
557
+ url = f"{url}&sizeFormat={size_format}"
558
+ elif not show_internal_database_sizes and size_format:
559
+ url = f"{url}?sizeFormat={size_format}"
560
+
561
+ response = await self._http_requests.get(url)
541
562
 
542
563
  return IndexStats(**self._http_requests.parse_json(response))
543
564
 
@@ -7,7 +7,7 @@ from pathlib import Path
7
7
  from typing import TYPE_CHECKING, Any, Literal
8
8
 
9
9
  from camel_converter import to_snake
10
- from httpx import Client
10
+ from httpx2 import Client
11
11
 
12
12
  from meilisearch_python_sdk._http_requests import HttpRequests
13
13
  from meilisearch_python_sdk._task import wait_for_task
@@ -459,9 +459,22 @@ class Index(BaseIndex):
459
459
 
460
460
  return index
461
461
 
462
- def get_stats(self) -> IndexStats:
462
+ def get_stats(
463
+ self,
464
+ *,
465
+ show_internal_database_sizes: bool = False,
466
+ size_format: Literal["human", "raw"] | None = None,
467
+ ) -> IndexStats:
463
468
  """Get stats of the index.
464
469
 
470
+ Args:
471
+ show_internal_database_sizes: Include internal database size inforamation in results.
472
+ Default = False.
473
+ size_format: When present and set to human, then all database sizes in responses of the
474
+ stat routes will be returned as a string containing an appropriate unit (MiB, GiB,
475
+ etc). When missing or set to raw, then the current behavior of expressing the size
476
+ in bytes as a number is retained. Default = None
477
+
465
478
  Returns:
466
479
  Stats of the index.
467
480
 
@@ -475,7 +488,15 @@ class Index(BaseIndex):
475
488
  >>> index = client.index("movies")
476
489
  >>> stats = index.get_stats()
477
490
  """
478
- response = self._http_requests.get(self._stats_url)
491
+ url = self._stats_url
492
+ if show_internal_database_sizes:
493
+ url = f"{url}?showInternalDatabaseSizes=true"
494
+ if size_format:
495
+ url = f"{url}&sizeFormat={size_format}"
496
+ elif not show_internal_database_sizes and size_format:
497
+ url = f"{url}?sizeFormat={size_format}"
498
+
499
+ response = self._http_requests.get(url)
479
500
 
480
501
  return IndexStats(**self._http_requests.parse_json(response))
481
502
 
@@ -10,8 +10,8 @@ from meilisearch_python_sdk.models.index import IndexStats
10
10
 
11
11
 
12
12
  class ClientStats(CamelBase):
13
- database_size: int
14
- used_database_size: int | None = None
13
+ database_size: int | str
14
+ used_database_size: int | str | None = None
15
15
  last_update: datetime | None = None
16
16
  indexes: dict[str, IndexStats] | None = None
17
17
 
@@ -4,6 +4,8 @@ from datetime import datetime
4
4
 
5
5
  from camel_converter.pydantic_base import CamelBase
6
6
 
7
+ from meilisearch_python_sdk.types import JsonDict
8
+
7
9
 
8
10
  class IndexBase(CamelBase):
9
11
  uid: str
@@ -21,6 +23,7 @@ class IndexStats(CamelBase):
21
23
  number_of_embeddings: int | None = None
22
24
  is_indexing: bool
23
25
  field_distribution: dict[str, int]
26
+ internal_database_sizes: JsonDict | None = None
24
27
 
25
28
 
26
29
  class FieldsFilter(CamelBase):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meilisearch-python-sdk
3
- Version: 7.1.4
3
+ Version: 7.2.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
@@ -42,9 +42,8 @@ Classifier: Typing :: Typed
42
42
  Requires-Python: >=3.10
43
43
  Requires-Dist: aiofiles>=0.7
44
44
  Requires-Dist: camel-converter[pydantic]>=1.0.0
45
- Requires-Dist: httpx[http2]>=0.17
45
+ Requires-Dist: httpx2[http2]>=2.0.0
46
46
  Requires-Dist: pydantic>=2.0.0
47
- Requires-Dist: pyjwt>=2.3.0
48
47
  Provides-Extra: all
49
48
  Requires-Dist: orjson; extra == 'all'
50
49
  Provides-Extra: orjson
@@ -1,36 +1,36 @@
1
1
  meilisearch_python_sdk/__init__.py,sha256=SB0Jlm6FwT13J9xasZKseZzTWBk0hkfe1CWyWmIIZnE,258
2
- meilisearch_python_sdk/_batch.py,sha256=akZqpYBFpjONynGVeIbuG46RtoWDeab8uoVvLHAG7X8,5918
3
- meilisearch_python_sdk/_http_requests.py,sha256=t6SQDEV2ejz021wuL7pyRgkFSTLRXQsO7-5rVAUYlwc,7763
4
- meilisearch_python_sdk/_task.py,sha256=Z3KvSiksXW24WxHYBkAnmed2CEDISWcBitYPFgZWc3o,13187
5
- meilisearch_python_sdk/_utils.py,sha256=CV7XpbHuvnPABCsOgUMdAU2ksO_-495aKQyd9OdVU-k,774
6
- meilisearch_python_sdk/_version.py,sha256=oiLrzAcX8ncnCS5Wgum0070pcw0D-7SB5313xxDVEDQ,18
2
+ meilisearch_python_sdk/_batch.py,sha256=PQyXyERVQwnxIFMthZ6zVqi2ZbQbMBs6TgUPdLbJLSY,5920
3
+ meilisearch_python_sdk/_http_requests.py,sha256=0Txm751u9NLLe8N02WIVUaQS4YdBu5hSERKIyFSwESw,7764
4
+ meilisearch_python_sdk/_task.py,sha256=lQp2n5ZjD8HboEP6Xid0Z275Jcr4GuXwh_LzpVY5LAo,13189
5
+ meilisearch_python_sdk/_utils.py,sha256=6Yy0tRe6V0kocVmaYb0rO2Hw2GmvEeY_XLY05P5bMq0,4317
6
+ meilisearch_python_sdk/_version.py,sha256=h-sKsY3DipXbXKatvP6S0ohnqJja9xZwry6xGKpC-4Q,18
7
7
  meilisearch_python_sdk/decorators.py,sha256=wgznbwCYRc1_nVfQaOgj7DcOMejB9mJIWqltW6CimnY,8836
8
- meilisearch_python_sdk/errors.py,sha256=xfn0peY8tbJtvdMI7ayvfbqSDPmO_EeSbEYB9JizQv0,2154
8
+ meilisearch_python_sdk/errors.py,sha256=VZAcq_72l1y1YMe56FOnxpQ9gV3sk8_ceT7FiHs_wYI,3176
9
9
  meilisearch_python_sdk/json_handler.py,sha256=cBJ3LtK7SRIJKgEg6MJ4XTSFUrNnZ2vSiTKdrg-56pk,2007
10
10
  meilisearch_python_sdk/plugins.py,sha256=ACk07_3ySHnz_clF3IiJRKeAlSGhpyQfn4taqAozIjo,3750
11
11
  meilisearch_python_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  meilisearch_python_sdk/types.py,sha256=nf-_ZjbPVGdVg-spkfFoaGebQvzmWqiDWuyBwR_qWJk,473
13
13
  meilisearch_python_sdk/_client/__init__.py,sha256=ld4FGQM5wt-Ygtt4z4UgZKL8dQ1jY98NY1Fst_-bhA4,164
14
- meilisearch_python_sdk/_client/_async_client.py,sha256=Zai9zkymo0MweIP-ESzTI6YQcx2qDxvYKO4Zw9ShOgA,47853
15
- meilisearch_python_sdk/_client/_base_client.py,sha256=i-mLj-8q-1ImMQ-2HjJ2zxd0aDJ5TWWlxj_mV3pDBXA,3926
16
- meilisearch_python_sdk/_client/_client.py,sha256=JWXqNskR--Ejx3jeAJb75CEqesOsGpyTeOm-vRdOGq0,46344
14
+ meilisearch_python_sdk/_client/_async_client.py,sha256=6PVZhROl9TrjieOTEnR2MG7Qlg_tWMKgKLITmmv9xjw,48828
15
+ meilisearch_python_sdk/_client/_base_client.py,sha256=FfNigpAOibsjkzlMf2FOv68DRcVYp4D0Nii0RW3C-Tc,3992
16
+ meilisearch_python_sdk/_client/_client.py,sha256=kyLIJfjWPAnXbJME5F522Aeo1qaxXYJxKreNBxpWafc,47319
17
17
  meilisearch_python_sdk/_client/_common.py,sha256=sunQLkOXwfg9k0w_OHJuVBmuivXPrP-l8PMtL14lbQw,2984
18
18
  meilisearch_python_sdk/index/__init__.py,sha256=sULiCF_Gqa66SDLuyvlHQ1NW-6ch5sWU6UNZ572sdEA,152
19
19
  meilisearch_python_sdk/index/_common.py,sha256=q6IqRpvmUIpOWuoa_XDuv_MsKB8XN1AQljgemN0Cha8,11009
20
- meilisearch_python_sdk/index/async_index.py,sha256=br5gi23jDIlv_RvbM3AikPZUyDAfIOSSOUJulHnu9To,207448
21
- meilisearch_python_sdk/index/index.py,sha256=Qkb6x1e89c_kGHKmDoH1SL-R6_smPsIUomx8l52-HPE,157391
20
+ meilisearch_python_sdk/index/async_index.py,sha256=B1lSENtrPLx0W7VD3fyuh6lMsOx4zsGF_1N4nP93Ihk,208413
21
+ meilisearch_python_sdk/index/index.py,sha256=Rd3VD64OggfYYC24EfJz3PYDW58XMFUOvK-VoS_4Org,158356
22
22
  meilisearch_python_sdk/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  meilisearch_python_sdk/models/batch.py,sha256=xgEfOuHKBmxzmzOddt6ZW-o1G6s0QVeIBt7S94k7QrE,1147
24
- meilisearch_python_sdk/models/client.py,sha256=uMzAxjhM0WKaviHLEWQdybB3bh32sl9t1MYi5oJb9uc,1757
24
+ meilisearch_python_sdk/models/client.py,sha256=BlYQtckkREp3_-kvxSqGfn2UhFvDp23QyxtlrSDwinA,1769
25
25
  meilisearch_python_sdk/models/documents.py,sha256=eT3FHrPND-g2IzNRyOHQApTTJ1WbFcGlqgxZ6aKrRgI,247
26
26
  meilisearch_python_sdk/models/health.py,sha256=hvruti7ylsk7bAh8RPOhTPcRrjx6MPgdkDFX9vZ5Qks,95
27
- meilisearch_python_sdk/models/index.py,sha256=7xoWMmbs4dqMk8NTvUEG6s3IVn7fS889yFIqZtVWXrQ,1642
27
+ meilisearch_python_sdk/models/index.py,sha256=7UpnXnstIFBysod_6ELy0723Oj8zXvGyJGla_T7sWn8,1745
28
28
  meilisearch_python_sdk/models/search.py,sha256=fpOUEq0oNYHJf2PoLRC7aajonpveTisdqwUk6VewSps,3695
29
29
  meilisearch_python_sdk/models/settings.py,sha256=lc0YYnqpMF3szWuKWAiGMKJGmqHO6HzmjhKdLet2z0Y,5747
30
30
  meilisearch_python_sdk/models/task.py,sha256=nDD-S7K-uL4gcYU-tyPstBWcnJi_8MiDwc53GG6i304,1105
31
31
  meilisearch_python_sdk/models/version.py,sha256=ISU-ZHgpXLBFDuMpWWfKdVo9Dq1HcD7s6HFnCiGTF8Y,184
32
32
  meilisearch_python_sdk/models/webhook.py,sha256=zSkEJJdEflinW3_seJTLQ_ZWs4w-pjTD3SS1ZawC32k,455
33
- meilisearch_python_sdk-7.1.4.dist-info/METADATA,sha256=EjIaIyF96RANqWlGxtQ-T57HAR6nlRNEONah73B8_xE,9623
34
- meilisearch_python_sdk-7.1.4.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
35
- meilisearch_python_sdk-7.1.4.dist-info/licenses/LICENSE,sha256=xVzevI1TrlKfM0plmJ7vfK1Muu0V9n-dGE8RnDrOFlM,1069
36
- meilisearch_python_sdk-7.1.4.dist-info/RECORD,,
33
+ meilisearch_python_sdk-7.2.0.dist-info/METADATA,sha256=p0ZevCV1QavfBmeaw47h_tlVrLe7fmgof81goHDFVuo,9597
34
+ meilisearch_python_sdk-7.2.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
35
+ meilisearch_python_sdk-7.2.0.dist-info/licenses/LICENSE,sha256=xVzevI1TrlKfM0plmJ7vfK1Muu0V9n-dGE8RnDrOFlM,1069
36
+ meilisearch_python_sdk-7.2.0.dist-info/RECORD,,