Fix crash when trying to delete non-existent record (#372)
This commit is contained in:
		
							parent
							
								
									285f7c90ee
								
							
						
					
					
						commit
						e9529e35be
					
				
					 2 changed files with 26 additions and 1 deletions
				
			
		| 
						 | 
					@ -32,6 +32,7 @@ from pydantic.main import ModelMetaclass, validate_model
 | 
				
			||||||
from pydantic.typing import NoArgAnyCallable
 | 
					from pydantic.typing import NoArgAnyCallable
 | 
				
			||||||
from pydantic.utils import Representation
 | 
					from pydantic.utils import Representation
 | 
				
			||||||
from redis.commands.json.path import Path
 | 
					from redis.commands.json.path import Path
 | 
				
			||||||
 | 
					from redis.exceptions import ResponseError
 | 
				
			||||||
from typing_extensions import Protocol, get_args, get_origin
 | 
					from typing_extensions import Protocol, get_args, get_origin
 | 
				
			||||||
from ulid import ULID
 | 
					from ulid import ULID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -799,7 +800,10 @@ class FindQuery:
 | 
				
			||||||
    async def delete(self):
 | 
					    async def delete(self):
 | 
				
			||||||
        """Delete all matching records in this query."""
 | 
					        """Delete all matching records in this query."""
 | 
				
			||||||
        # TODO: Better response type, error detection
 | 
					        # TODO: Better response type, error detection
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
            return await self.model.db().delete(*[m.key() for m in await self.all()])
 | 
					            return await self.model.db().delete(*[m.key() for m in await self.all()])
 | 
				
			||||||
 | 
					        except ResponseError:
 | 
				
			||||||
 | 
					            return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async def __aiter__(self):
 | 
					    async def __aiter__(self):
 | 
				
			||||||
        if self._model_cache:
 | 
					        if self._model_cache:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -140,6 +140,27 @@ async def test_exact_match_queries(members, m):
 | 
				
			||||||
    assert actual == [member1]
 | 
					    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
 | 
					@py_test_mark_asyncio
 | 
				
			||||||
async def test_full_text_search_queries(members, m):
 | 
					async def test_full_text_search_queries(members, m):
 | 
				
			||||||
    member1, member2, member3 = members
 | 
					    member1, member2, member3 = members
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue