Skip to content

Commit ec64322

Browse files
authored
Merge pull request #598 from meilisearch/add_delete_task_api_for_v0.30.0
Add delete task api for v0.30.0
2 parents 441b507 + 8f4d1ef commit ec64322

File tree

4 files changed

+94
-2
lines changed

4 files changed

+94
-2
lines changed

meilisearch/client.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from meilisearch.errors import MeiliSearchError
1515
from meilisearch.index import Index
1616
from meilisearch.models.task import TaskInfo
17-
from meilisearch.task import cancel_tasks, get_task, get_tasks, wait_for_task
17+
from meilisearch.task import cancel_tasks, delete_tasks, get_task, get_tasks, wait_for_task
1818

1919

2020
class Client:
@@ -463,6 +463,25 @@ def cancel_tasks(self, parameters: dict[str, Any]) -> TaskInfo:
463463
"""
464464
return cancel_tasks(self.config, parameters=parameters)
465465

466+
def delete_tasks(self, parameters: dict[str, Any]) -> TaskInfo:
467+
"""Delete a list of finished tasks.
468+
469+
Parameters
470+
----------
471+
parameters (optional):
472+
parameters accepted by the delete tasks route:https://docs.meilisearch.com/reference/api/tasks.html#delete-task.
473+
Returns
474+
-------
475+
task_info:
476+
TaskInfo instance containing information about a task to track the progress of an asynchronous process.
477+
https://docs.meilisearch.com/reference/api/tasks.html#get-one-task
478+
Raises
479+
------
480+
MeiliSearchApiError
481+
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://docs.meilisearch.com/errors/#meilisearch-errors
482+
"""
483+
return delete_tasks(self.config, parameters=parameters)
484+
466485
def wait_for_task(
467486
self,
468487
uid: int,

meilisearch/task.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,34 @@ def cancel_tasks(config: Config, parameters: dict[str, Any]) -> TaskInfo:
9999
return TaskInfo(**response)
100100

101101

102+
def delete_tasks(config: Config, parameters: dict[str, Any] | None = None) -> TaskInfo:
103+
"""Delete a list of enqueued or processing tasks.
104+
Parameters
105+
----------
106+
config:
107+
Config object containing permission and location of Meilisearch.
108+
parameters (optional):
109+
parameters accepted by the delete tasks route:https://docs.meilisearch.com/reference/api/tasks.html#delete-task.
110+
Returns
111+
-------
112+
task_info:
113+
TaskInfo instance containing information about a task to track the progress of an asynchronous process.
114+
https://docs.meilisearch.com/reference/api/tasks.html#get-one-task
115+
Raises
116+
------
117+
MeiliSearchApiError
118+
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://docs.meilisearch.com/errors/#meilisearch-errors
119+
"""
120+
http = HttpRequests(config)
121+
if parameters is None:
122+
parameters = {}
123+
for param in parameters:
124+
if isinstance(parameters[param], list):
125+
parameters[param] = ",".join(parameters[param])
126+
response = http.delete(f"{config.paths.task}?{parse.urlencode(parameters)}")
127+
return TaskInfo(**response)
128+
129+
102130
def wait_for_task(
103131
config: Config,
104132
uid: int,

tests/client/test_client_task_meilisearch.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def test_get_tasks_with_all_plural_parameters(client, empty_index):
4545
{"indexUids": [common.INDEX_UID], "statuses": ["succeeded"], "types": ["indexCreation"]}
4646
)
4747
assert isinstance(tasks, dict)
48-
assert len(tasks["results"]) > 1
48+
assert len(tasks["results"]) >= 1
4949

5050

5151
def test_get_tasks_with_date_parameters(client, empty_index):
@@ -131,3 +131,39 @@ def test_cancel_every_task(client):
131131
assert task.index_uid is None
132132
assert task.type == "taskCancelation"
133133
assert "statuses=enqueued%2Cprocessing" in tasks["results"][0]["details"]["originalFilter"]
134+
135+
136+
def test_delete_tasks_by_uid(client, empty_index, small_movies):
137+
"""Tests getting a task of an inexistent operation."""
138+
index = empty_index()
139+
task_addition = index.add_documents(small_movies)
140+
task_deleted = client.delete_tasks({"uids": task_addition.task_uid})
141+
client.wait_for_task(task_deleted.task_uid)
142+
with pytest.raises(Exception):
143+
client.get_task(task_addition.task_uid)
144+
task = client.get_task(task_deleted.task_uid)
145+
146+
assert isinstance(task_deleted, TaskInfo)
147+
assert task_deleted.task_uid is not None
148+
assert task_deleted.index_uid is None
149+
assert task_deleted.type == "taskDeletion"
150+
assert "uids" in task["details"]["originalFilter"]
151+
assert f"uids={task_addition.task_uid}" in task["details"]["originalFilter"]
152+
153+
154+
def test_delete_all_tasks(client):
155+
tasks_before = client.get_tasks()
156+
task = client.delete_tasks({"statuses": ["succeeded", "failed", "canceled"]})
157+
client.wait_for_task(task.task_uid)
158+
tasks_after = client.get_tasks()
159+
160+
assert isinstance(task, TaskInfo)
161+
assert task.task_uid is not None
162+
assert task.index_uid is None
163+
assert task.type == "taskDeletion"
164+
assert len(tasks_after["results"]) == 1
165+
assert len(tasks_before["results"]) == len(tasks_after["results"])
166+
assert (
167+
"statuses=succeeded%2Cfailed%2Ccanceled"
168+
in tasks_after["results"][0]["details"]["originalFilter"]
169+
)

tests/conftest.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@ def clear_indexes(client):
2929
client.wait_for_task(task["taskUid"])
3030

3131

32+
@fixture(autouse=True)
33+
def clear_all_tasks(client):
34+
"""
35+
Auto-clears the tasks after each test function run.
36+
Makes all the test functions independent.
37+
"""
38+
client.delete_tasks({"statuses": ["succeeded", "failed", "canceled"]})
39+
40+
3241
@fixture(scope="function")
3342
def indexes_sample(client):
3443
indexes = []

0 commit comments

Comments
 (0)