diff --git a/docs/usage.rst b/docs/usage.rst index fdc95401290cee7f69ce1d9db3ca5a6737ad28e5..ecd4b2edd85e29eaa7f78da70c8943091527404b 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -14,3 +14,8 @@ Then you can create and retrieve particular series: .. autoclass:: tempsdb.series.TimeSeries :members: + +You retrieve their data via Iterators: + +.. autoclass:: tempsdb.iterators.Iterator + :members: diff --git a/tempsdb/iterators.pyx b/tempsdb/iterators.pyx index 70aa8aa9ca823bb59d8b208b92da90f957c55c4c..0a3e9a35414b17f52149a28d06f42802981cc831 100644 --- a/tempsdb/iterators.pyx +++ b/tempsdb/iterators.pyx @@ -72,24 +72,28 @@ cdef class Iterator: return 0 def __next__(self) -> tp.Tuple[int, bytes]: - return self.next() + cdef tuple tpl = self.next() + if tpl is None: + raise StopIteration() + return tpl cpdef tuple next(self): """ - Return next element + Return next element or None, if list was exhausted :return: next element - :rtype: tp.Tuple[int, bytes] + :rtype: tp.Optional[tp.Tuple[int, bytes]] """ - if self.current_chunk is None: - self.get_next() - if self.i == self.limit: - self.get_next() try: + if self.current_chunk is None: + self.get_next() + if self.i == self.limit: + self.get_next() return self.current_chunk.get_piece_at(self.i) + except StopIteration: + return None finally: self.i += 1 def __iter__(self) -> Iterator: return self -