Source code for brownie.datastructures.iterators

# coding: utf-8
"""
    brownie.datastructures.iterators
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    :copyright: 2010-2011 by Daniel Neuhäuser
    :license: BSD, see LICENSE.rst for details
"""
from collections import deque


[docs]class PeekableIterator(object): """ An iterator which allows peeking. .. versionadded:: 0.6 """ def __init__(self, iterable): self.iterator = iter(iterable) self.remaining = deque() def next(self): if self.remaining: return self.remaining.popleft() return self.iterator.next()
[docs] def peek(self, n=1): """ Returns the next `n` items without consuming the iterator, if the iterator has less than `n` items these are returned. Raises :exc:`ValueError` if `n` is lower than 1. """ if n < 1: raise ValueError('n should be greater than 0') items = list(self.remaining)[:n] while len(items) < n: try: item = self.iterator.next() except StopIteration: break items.append(item) self.remaining.append(item) return items
def __iter__(self): return self def __repr__(self): return '%s(%r)' % (self.__class__.__name__, self.iterator)
__all__ = ['PeekableIterator']