Skip to content

Commit

Permalink
GroupingIterator: init _last_group_yielded_at during first `__nex…
Browse files Browse the repository at this point in the history
…t__`
  • Loading branch information
ebonnal committed Sep 30, 2024
1 parent 4685f11 commit ba38105
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions streamable/iters.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,13 +102,15 @@ def __init__(
self.size = size
self.interval_seconds = interval_seconds
self._to_be_raised: Optional[Exception] = None
self._last_yielded_group_at = time.time()
self._last_group_yielded_at: float = 0
self._current_group: List[T] = []

def _interval_seconds_have_elapsed(self) -> bool:
return (time.time() - self._last_yielded_group_at) >= self.interval_seconds
return (time.time() - self._last_group_yielded_at) >= self.interval_seconds

def __next__(self) -> List[T]:
if not self._last_group_yielded_at:
self._last_group_yielded_at = time.time()
if self._to_be_raised:
e, self._to_be_raised = self._to_be_raised, None
raise e
Expand All @@ -123,7 +125,7 @@ def __next__(self) -> List[T]:
self._to_be_raised = e

group, self._current_group = self._current_group, []
self._last_yielded_group_at = time.time()
self._last_group_yielded_at = time.time()
return group


Expand All @@ -150,7 +152,7 @@ def _group_next_elem(self) -> None:
self._groups_by[key].append(elem)

def _interval_seconds_have_elapsed(self) -> bool:
return (time.time() - self._last_yielded_group_at) >= self.interval_seconds
return (time.time() - self._last_group_yielded_at) >= self.interval_seconds

def _pop_full_group(self) -> Optional[List[T]]:
for key, group in self._groups_by.items():
Expand All @@ -172,10 +174,12 @@ def _pop_largest_group(self) -> List[T]:
return self._groups_by.pop(largest_group_key)

def _return_group(self, group: List[T]) -> List[T]:
self._last_yielded_group_at = time.time()
self._last_group_yielded_at = time.time()
return group

def __next__(self) -> List[T]:
if not self._last_group_yielded_at:
self._last_group_yielded_at = time.time()
if self._is_exhausted:
if self._groups_by:
return self._return_group(self._pop_first_group())
Expand Down

0 comments on commit ba38105

Please sign in to comment.