Skip to content

Commit cb9ca36

Browse files
Merge pull request #325 from algolia/feat/delete_by
feat(delete_by): implement new delete_by endpoint
2 parents 97bbec2 + aec86ab commit cb9ca36

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

algoliasearch/index.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ def save_objects(self, objects, request_options=None):
240240
def deleteByQuery(self, query, params=None):
241241
return self.delete_by_query(query, params)
242242

243+
@deprecated
243244
def delete_by_query(self, query, params=None, request_options=None):
244245
"""
245246
Delete all objects matching a query.
@@ -260,6 +261,19 @@ def delete_by_query(self, query, params=None, request_options=None):
260261
ids = (o['objectID'] for o in self.browse_all(params))
261262
return self.delete_objects(ids, request_options=request_options)
262263

264+
def delete_by(self, params, request_options=None):
265+
"""
266+
Delete all objects matching an empty query performed with the given
267+
parameters
268+
269+
@param params parameter to restrict the search.
270+
"""
271+
params = {'params': urlencode(urlify(params))}
272+
return self._req(
273+
False, '/deleteByQuery', 'POST', data=params,
274+
request_options=request_options
275+
)
276+
263277
@deprecated
264278
def deleteObject(self, object_id):
265279
return self.delete_object(object_id)

tests/test_index.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,28 @@ def test_delete_by_query(rw_index):
487487
res = rw_index.search('', {'hitsPerPage': 0})
488488
assert res['nbHits'] < 5
489489

490+
491+
def test_delete_by(index):
492+
obj1 = {'objectID': 'A', 'color': 'red'}
493+
obj2 = {'objectID': 'B', 'color': 'blue'}
494+
index.save_objects([obj1, obj2])
495+
task = index.set_settings({
496+
'attributesForFaceting': ['color']
497+
})
498+
index.wait_task(task['taskID'])
499+
500+
task = index.delete_by({'filters': 'color:red'})
501+
print(task)
502+
index.wait_task(task['taskID'])
503+
504+
res = index.search('')
505+
assert len(res['hits']) == 1
506+
del res['hits'][0]['_highlightResult']
507+
508+
assert obj1 not in res['hits']
509+
assert obj2 in res['hits']
510+
511+
490512
def test_batch(rw_index):
491513
factory = Factory()
492514
requests = [

0 commit comments

Comments
 (0)