Commit 26e2a24a authored by Evan Simpson's avatar Evan Simpson

Make Iterator better at recognizing Python 2.2 iterators.

parent b6c7f455
...@@ -18,8 +18,8 @@ The Iterator() function accepts either a sequence or a Python ...@@ -18,8 +18,8 @@ The Iterator() function accepts either a sequence or a Python
iterator. The next() method fetches the next item, and returns iterator. The next() method fetches the next item, and returns
true if it succeeds. true if it succeeds.
$Id: Iterator.py,v 1.4 2001/12/12 02:21:56 evan Exp $''' $Id: Iterator.py,v 1.5 2001/12/13 18:35:32 evan Exp $'''
__version__='$Revision: 1.4 $'[11:-2] __version__='$Revision: 1.5 $'[11:-2]
import string import string
...@@ -31,12 +31,12 @@ class Iterator: ...@@ -31,12 +31,12 @@ class Iterator:
nextIndex = 0 nextIndex = 0
def __init__(self, seq): def __init__(self, seq):
self.seq = seq self.seq = seq
if hasattr(seq, 'next'): for inner in seqInner, iterInner:
inner = iterInner if inner._supports(seq):
else: self._inner = inner
inner = seqInner self._prep_next = inner.prep_next
self._inner = inner return
self._prep_next = inner.prep_next raise TypeError, "Iterator does not support %s" % `seq`
def __getattr__(self, name): def __getattr__(self, name):
try: try:
...@@ -134,6 +134,13 @@ class InnerBase: ...@@ -134,6 +134,13 @@ class InnerBase:
class SeqInner(InnerBase): class SeqInner(InnerBase):
'''Inner class for sequence Iterators''' '''Inner class for sequence Iterators'''
def _supports(self, ob):
try: ob[0]
except TypeError: return 0
except: pass
return 1
def prep_next(self, it): def prep_next(self, it):
i = it.nextIndex i = it.nextIndex
try: try:
...@@ -157,6 +164,13 @@ except NameError: ...@@ -157,6 +164,13 @@ except NameError:
class IterInner(InnerBase): class IterInner(InnerBase):
'''Iterator inner class for Python iterators''' '''Iterator inner class for Python iterators'''
def _supports(self, ob):
try:
if hasattr(ob, 'next') and (ob is iter(ob)):
return 1
except:
return 0
def prep_next(self, it): def prep_next(self, it):
try: try:
it._next = it.seq.next() it._next = it.seq.next()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment