From 674ff19aef43a504539090123db37451a7257226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ma=C5=9Blanka?= <piotr.maslanka@henrietta.com.pl> Date: Mon, 30 Nov 2020 19:49:21 +0100 Subject: [PATCH] fix iterators --- docs/usage.rst | 5 +++++ tempsdb/iterators.pyx | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/usage.rst b/docs/usage.rst index fdc9540..ecd4b2e 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 70aa8aa..0a3e9a3 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 - -- GitLab