diff --git a/weaviate/collections/iterator.py b/weaviate/collections/iterator.py index 6952d7be9..326000f9a 100644 --- a/weaviate/collections/iterator.py +++ b/weaviate/collections/iterator.py @@ -1,3 +1,4 @@ +from collections import deque from dataclasses import dataclass from typing import ( Any, @@ -6,7 +7,6 @@ Generic, Iterable, Iterator, - List, Optional, ) from uuid import UUID @@ -54,14 +54,14 @@ def __init__( self.__query = query self.__inputs = inputs - self.__iter_object_cache: List[Object[TProperties, TReferences]] = [] + self.__iter_object_cache: deque[Object[TProperties, TReferences]] = deque() self.__iter_object_last_uuid: Optional[UUID] = _parse_after(self.__inputs.after) self.__iter_cache_size = cache_size or ITERATOR_CACHE_SIZE def __iter__( self, ) -> Iterator[Object[TProperties, TReferences]]: - self.__iter_object_cache = [] + self.__iter_object_cache = deque() self.__iter_object_last_uuid = _parse_after(self.__inputs.after) return self @@ -75,11 +75,11 @@ def __next__(self) -> Object[TProperties, TReferences]: return_properties=self.__inputs.return_properties, return_references=self.__inputs.return_references, ) - self.__iter_object_cache = res.objects # type: ignore + self.__iter_object_cache = deque(res.objects) # type: ignore if len(self.__iter_object_cache) == 0: raise StopIteration - ret_object = self.__iter_object_cache.pop(0) + ret_object = self.__iter_object_cache.popleft() self.__iter_object_last_uuid = ret_object.uuid assert ( self.__iter_object_last_uuid is not None @@ -100,14 +100,14 @@ def __init__( self.__query = query self.__inputs = inputs - self.__iter_object_cache: List[Object[TProperties, TReferences]] = [] + self.__iter_object_cache: deque[Object[TProperties, TReferences]] = deque() self.__iter_object_last_uuid: Optional[UUID] = _parse_after(self.__inputs.after) self.__iter_cache_size = cache_size or ITERATOR_CACHE_SIZE def __aiter__( self, ) -> AsyncIterator[Object[TProperties, TReferences]]: - self.__iter_object_cache = [] + self.__iter_object_cache = deque() self.__iter_object_last_uuid = _parse_after(self.__inputs.after) return self @@ -123,11 +123,11 @@ async def __anext__( return_properties=self.__inputs.return_properties, return_references=self.__inputs.return_references, ) - self.__iter_object_cache = res.objects # type: ignore + self.__iter_object_cache = deque(res.objects) # type: ignore if len(self.__iter_object_cache) == 0: raise StopAsyncIteration - ret_object = self.__iter_object_cache.pop(0) + ret_object = self.__iter_object_cache.popleft() self.__iter_object_last_uuid = ret_object.uuid assert ( self.__iter_object_last_uuid is not None