Skip to content

Commit 40f9a52

Browse files
bors[bot]sanders41
andauthored
Merge #268
268: Adding delete if exists methods r=alallema a=sanders41 Relates to meilisearch/integration-guides#107 Co-authored-by: Paul Sanders <[email protected]>
2 parents defc5b8 + 80db3c0 commit 40f9a52

File tree

3 files changed

+79
-1
lines changed

3 files changed

+79
-1
lines changed

meilisearch/client.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,32 @@ def create_index(self, uid: str, options: Optional[Dict[str, Any]] = None) -> In
5050
"""
5151
return Index.create(self.config, uid, options)
5252

53+
def delete_index_if_exists(self, uid: str) -> bool:
54+
"""Deletes an index if it already exists
55+
56+
Parameters
57+
----------
58+
uid:
59+
UID of the index.
60+
61+
Returns
62+
--------
63+
Returns True if an index was deleted or False if not
64+
65+
Raises
66+
------
67+
MeiliSearchApiError
68+
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
69+
"""
70+
71+
try:
72+
self.http.delete(f'{self.config.paths.index}/{uid}')
73+
return True
74+
except MeiliSearchApiError as error:
75+
if error.error_code != "index_not_found":
76+
raise error
77+
return False
78+
5379
def get_indexes(self) -> List[Index]:
5480
"""Get all indexes.
5581

meilisearch/index.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from requests import Response
77

8+
from meilisearch.errors import MeiliSearchApiError
89
from meilisearch._httprequests import HttpRequests
910
from meilisearch.config import Config
1011
from meilisearch.errors import MeiliSearchTimeoutError
@@ -54,6 +55,25 @@ def delete(self) -> Response:
5455

5556
return self.http.delete(f'{self.config.paths.index}/{self.uid}')
5657

58+
def delete_if_exists(self) -> bool:
59+
"""Deletes the index if it already exists
60+
61+
Returns
62+
--------
63+
Returns True if an index was deleted or False if not
64+
65+
Raises
66+
MeiliSearchApiError
67+
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
68+
"""
69+
try:
70+
self.delete()
71+
return True
72+
except MeiliSearchApiError as error:
73+
if error.error_code != "index_not_found":
74+
raise error
75+
return False
76+
5777
def update(self, **body: Dict[str, Any]) -> 'Index':
5878
"""Update the index primary-key.
5979

meilisearch/tests/index/test_index.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
from datetime import datetime
44

55
import pytest
6+
from meilisearch.client import Client
7+
from meilisearch.errors import MeiliSearchApiError
68
from meilisearch.index import Index
7-
from meilisearch.tests import common
9+
from meilisearch.tests import BASE_URL, common, MASTER_KEY
810

911
def test_create_index(client):
1012
"""Tests creating an index."""
@@ -184,3 +186,33 @@ def test_delete_index(client):
184186
with pytest.raises(Exception):
185187
client.get_index(uid=common.INDEX_UID3)
186188
assert len(client.get_indexes()) == 0
189+
190+
@pytest.mark.usefixtures("indexes_sample")
191+
def test_delete_if_exists(client):
192+
assert client.get_index(uid=common.INDEX_UID)
193+
deleted = Client(BASE_URL, MASTER_KEY).index(common.INDEX_UID).delete_if_exists()
194+
assert deleted is True
195+
with pytest.raises(MeiliSearchApiError):
196+
client.get_index(uid=common.INDEX_UID)
197+
198+
def test_delete_if_exists_no_delete(client):
199+
with pytest.raises(MeiliSearchApiError):
200+
client.get_index(uid="none")
201+
202+
deleted = Client(BASE_URL, MASTER_KEY).index("none").delete_if_exists()
203+
assert deleted is False
204+
205+
@pytest.mark.usefixtures("indexes_sample")
206+
def test_delete_index_if_exists(client):
207+
assert client.get_index(uid=common.INDEX_UID)
208+
deleted = client.delete_index_if_exists(common.INDEX_UID)
209+
assert deleted is True
210+
with pytest.raises(MeiliSearchApiError):
211+
client.get_index(uid=common.INDEX_UID)
212+
213+
def test_delete_index_if_exists_no_delete(client):
214+
with pytest.raises(MeiliSearchApiError):
215+
client.get_index(uid="none")
216+
217+
deleted = client.delete_index_if_exists("none")
218+
assert deleted is False

0 commit comments

Comments
 (0)