1010from httpx import Client as HttpxClient
1111
1212from meilisearch_python_sdk ._http_requests import AsyncHttpRequests , HttpRequests
13+ from meilisearch_python_sdk ._utils import get_async_client , get_client
1314from meilisearch_python_sdk .errors import MeilisearchTaskFailedError , MeilisearchTimeoutError
1415from meilisearch_python_sdk .json_handler import BuiltinHandler , OrjsonHandler , UjsonHandler
1516from meilisearch_python_sdk .models .task import TaskInfo , TaskResult , TaskStatus
@@ -76,7 +77,7 @@ async def async_cancel_tasks(
7677 parameters ["statuses" ] = "enqueued,processing"
7778
7879 url = f"tasks/cancel?{ urlencode (parameters )} "
79- client_ = _get_async_client (client )
80+ client_ = get_async_client (client )
8081 response = await client_ .post (url )
8182
8283 return TaskInfo (** response .json ())
@@ -110,14 +111,17 @@ async def async_delete_tasks(
110111 parameters ["statuses" ] = "canceled,enqueued,failed,processing,succeeded"
111112
112113 url = f"tasks?{ urlencode (parameters )} "
113- client_ = _get_async_client (client )
114+ client_ = get_async_client (client )
114115 response = await client_ .delete (url )
115116
116117 return TaskInfo (** response .json ())
117118
118119
119- async def async_get_task (client : HttpxAsyncClient | AsyncClient , task_id : int ) -> TaskResult :
120- client_ = _get_async_client (client )
120+ async def async_get_task (
121+ client : HttpxAsyncClient | AsyncClient ,
122+ task_id : int ,
123+ ) -> TaskResult :
124+ client_ = get_async_client (client )
121125 response = await client_ .get (f"tasks/{ task_id } " )
122126
123127 return TaskResult (** response .json ())
@@ -128,12 +132,19 @@ async def async_get_tasks(
128132 * ,
129133 index_ids : list [str ] | None = None ,
130134 types : str | list [str ] | None = None ,
135+ reverse : bool | None = None ,
131136) -> TaskStatus :
132137 url = f"tasks?indexUids={ ',' .join (index_ids )} " if index_ids else "tasks"
133138 if types :
134139 formatted_types = "," .join (types ) if isinstance (types , list ) else types
135140 url = f"{ url } &types={ formatted_types } " if "?" in url else f"{ url } ?types={ formatted_types } "
136- client_ = _get_async_client (client )
141+ if reverse :
142+ url = (
143+ f"{ url } &reverse={ str (reverse ).lower ()} "
144+ if "?" in url
145+ else f"{ url } ?reverse={ str (reverse ).lower ()} "
146+ )
147+ client_ = get_async_client (client )
137148 response = await client_ .get (url )
138149
139150 return TaskStatus (** response .json ())
@@ -147,7 +158,7 @@ async def async_wait_for_task(
147158 interval_in_ms : int = 50 ,
148159 raise_for_status : bool = False ,
149160) -> TaskResult :
150- client_ = _get_async_client (client )
161+ client_ = get_async_client (client )
151162 handler = _get_json_handler (client )
152163 url = f"tasks/{ task_id } "
153164 http_requests = AsyncHttpRequests (client_ , handler )
@@ -207,7 +218,7 @@ def cancel_tasks(
207218 parameters ["statuses" ] = "enqueued,processing"
208219
209220 url = f"tasks/cancel?{ urlencode (parameters )} "
210- client_ = _get_client (client )
221+ client_ = get_client (client )
211222 response = client_ .post (url )
212223
213224 return TaskInfo (** response .json ())
@@ -241,14 +252,14 @@ def delete_tasks(
241252 parameters ["statuses" ] = "canceled,enqueued,failed,processing,succeeded"
242253
243254 url = f"tasks?{ urlencode (parameters )} "
244- client_ = _get_client (client )
255+ client_ = get_client (client )
245256 response = client_ .delete (url )
246257
247258 return TaskInfo (** response .json ())
248259
249260
250261def get_task (client : HttpxClient | Client , task_id : int ) -> TaskResult :
251- client_ = _get_client (client )
262+ client_ = get_client (client )
252263 response = client_ .get (f"tasks/{ task_id } " )
253264
254265 return TaskResult (** response .json ())
@@ -259,12 +270,19 @@ def get_tasks(
259270 * ,
260271 index_ids : list [str ] | None = None ,
261272 types : str | list [str ] | None = None ,
273+ reverse : bool | None = None ,
262274) -> TaskStatus :
263275 url = f"tasks?indexUids={ ',' .join (index_ids )} " if index_ids else "tasks"
264276 if types :
265277 formatted_types = "," .join (types ) if isinstance (types , list ) else types
266278 url = f"{ url } &types={ formatted_types } " if "?" in url else f"{ url } ?types={ formatted_types } "
267- client_ = _get_client (client )
279+ if reverse :
280+ url = (
281+ f"{ url } &reverse={ str (reverse ).lower ()} "
282+ if "?" in url
283+ else f"{ url } ?reverse={ str (reverse ).lower ()} "
284+ )
285+ client_ = get_client (client )
268286 response = client_ .get (url )
269287
270288 return TaskStatus (** response .json ())
@@ -278,7 +296,7 @@ def wait_for_task(
278296 interval_in_ms : int = 50 ,
279297 raise_for_status : bool = False ,
280298) -> TaskResult :
281- client_ = _get_client (client )
299+ client_ = get_client (client )
282300 handler = _get_json_handler (client )
283301 url = f"tasks/{ task_id } "
284302 http_requests = HttpRequests (client_ , json_handler = handler )
@@ -310,24 +328,6 @@ def wait_for_task(
310328 time .sleep (interval_in_ms / 1000 )
311329
312330
313- def _get_async_client (
314- client : AsyncClient | HttpxAsyncClient ,
315- ) -> HttpxAsyncClient :
316- if isinstance (client , HttpxAsyncClient ):
317- return client
318-
319- return client .http_client
320-
321-
322- def _get_client (
323- client : Client | HttpxClient ,
324- ) -> HttpxClient :
325- if isinstance (client , HttpxClient ):
326- return client
327-
328- return client .http_client
329-
330-
331331def _get_json_handler (
332332 client : AsyncClient | Client | HttpxAsyncClient | HttpxClient ,
333333) -> BuiltinHandler | OrjsonHandler | UjsonHandler :
0 commit comments