From 38e44366750990c95ab48f9e9933e919689dde0c Mon Sep 17 00:00:00 2001 From: dvora-h Date: Tue, 6 Sep 2022 15:18:04 +0300 Subject: [PATCH] fix delete non existing record --- aredis_om/model/model.py | 6 +++++- tests/test_hash_model.py | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/aredis_om/model/model.py b/aredis_om/model/model.py index 46857106..67af36a1 100644 --- a/aredis_om/model/model.py +++ b/aredis_om/model/model.py @@ -31,6 +31,7 @@ from pydantic.main import ModelMetaclass, validate_model from pydantic.typing import NoArgAnyCallable from pydantic.utils import Representation +from redis.exceptions import ResponseError from typing_extensions import Protocol, get_args, get_origin from ulid import ULID @@ -795,7 +796,10 @@ async def update(self, use_transaction=True, **field_values): async def delete(self): """Delete all matching records in this query.""" # TODO: Better response type, error detection - return await self.model.db().delete(*[m.key() for m in await self.all()]) + try: + return await self.model.db().delete(*[m.key() for m in await self.all()]) + except ResponseError: + return 0 async def __aiter__(self): if self._model_cache: diff --git a/tests/test_hash_model.py b/tests/test_hash_model.py index 84a05086..1e3d3a40 100644 --- a/tests/test_hash_model.py +++ b/tests/test_hash_model.py @@ -140,6 +140,27 @@ async def test_exact_match_queries(members, m): assert actual == [member1] +@py_test_mark_asyncio +async def test_delete_non_exist(members, m): + member1, member2, member3 = members + actual = await m.Member.find( + (m.Member.last_name == "Brookins") & ~(m.Member.first_name == "Andrew") + ).all() + assert actual == [member2] + assert ( + 1 + == await m.Member.find( + (m.Member.last_name == "Brookins") & ~(m.Member.first_name == "Andrew") + ).delete() + ) + assert ( + 0 + == await m.Member.find( + (m.Member.last_name == "Brookins") & ~(m.Member.first_name == "Andrew") + ).delete() + ) + + @py_test_mark_asyncio async def test_full_text_search_queries(members, m): member1, member2, member3 = members