1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- """Check non-iterators returned by __iter__ """
-
- # pylint: disable=too-few-public-methods, missing-docstring, no-self-use
-
- import six
-
- class FirstGoodIterator(object):
- """ yields in iterator. """
-
- def __iter__(self):
- for index in range(10):
- yield index
-
- class SecondGoodIterator(object):
- """ __iter__ and next """
-
- def __iter__(self):
- return self
-
- def __next__(self):
- """ Infinite iterator, but still an iterator """
- return 1
-
- def next(self):
- """Same as __next__, but for Python 2."""
- return 1
-
- class ThirdGoodIterator(object):
- """ Returns other iterator, not the current instance """
-
- def __iter__(self):
- return SecondGoodIterator()
-
- class FourthGoodIterator(object):
- """ __iter__ returns iter(...) """
-
- def __iter__(self):
- return iter(range(10))
-
-
- class IteratorMetaclass(type):
- def __next__(cls):
- return 1
-
- def next(cls):
- return 2
-
-
- @six.add_metaclass(IteratorMetaclass)
- class IteratorClass(object):
- """Iterable through the metaclass."""
-
-
- class FifthGoodIterator(object):
- """__iter__ returns a class which uses an iterator-metaclass."""
- def __iter__(self):
- return IteratorClass
-
- class FileBasedIterator(object):
- def __init__(self, path):
- self.path = path
- self.file = None
-
- def __iter__(self):
- if self.file is not None:
- self.file.close()
- self.file = open(self.path)
- # self file has two infered values: None and <instance of 'file'>
- # we don't want to emit error in this case
- return self.file
-
-
- class FirstBadIterator(object):
- """ __iter__ returns a list """
-
- def __iter__(self): # [non-iterator-returned]
- return []
-
- class SecondBadIterator(object):
- """ __iter__ without next """
-
- def __iter__(self): # [non-iterator-returned]
- return self
-
- class ThirdBadIterator(object):
- """ __iter__ returns an instance of another non-iterator """
-
- def __iter__(self): # [non-iterator-returned]
- return SecondBadIterator()
-
- class FourthBadIterator(object):
- """__iter__ returns a class."""
-
- def __iter__(self): # [non-iterator-returned]
- return ThirdBadIterator
|