[Zope-Checkins] SVN: Zope/branches/ajung-zpt-end-game/lib/python/
deprecate old iterator code and make compat iterator look more like
Philipp von Weitershausen
philikon at philikon.de
Wed May 10 17:01:21 EDT 2006
Log message for revision 68092:
deprecate old iterator code and make compat iterator look more like
the original thing
Changed:
U Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/Expressions.py
U Zope/branches/ajung-zpt-end-game/lib/python/ZTUtils/Iterator.py
-=-
Modified: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/Expressions.py
===================================================================
--- Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/Expressions.py 2006-05-10 20:03:21 UTC (rev 68091)
+++ Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/Expressions.py 2006-05-10 21:01:20 UTC (rev 68092)
@@ -101,6 +101,8 @@
class ZopeIterator(Iterator):
+ __allow_access_to_unprotected_subobjects__ = True
+
# these used to be properties in ZTUtils.Iterator.Iterator
@property
@@ -122,6 +124,10 @@
# these aren't in zope.tales.tales.Iterator, but were in
# ZTUtils.Iterator.Iterator
+ @property
+ def nextIndex(self):
+ return self.index + 1
+
def first(self, name=None):
if self.start:
return True
Modified: Zope/branches/ajung-zpt-end-game/lib/python/ZTUtils/Iterator.py
===================================================================
--- Zope/branches/ajung-zpt-end-game/lib/python/ZTUtils/Iterator.py 2006-05-10 20:03:21 UTC (rev 68091)
+++ Zope/branches/ajung-zpt-end-game/lib/python/ZTUtils/Iterator.py 2006-05-10 21:01:20 UTC (rev 68092)
@@ -12,162 +12,14 @@
##############################################################################
"""Iterator class
-Unlike the builtin iterators of Python 2.2+, these classes are
-designed to maintain information about the state of an iteration.
-The Iterator() function accepts either a sequence or a Python
-iterator. The next() method fetches the next item, and returns
-true if it succeeds.
+BBB 2005/05/01 -- to be removed after 12 months
$Id$
"""
-
-class Iterator:
- '''Simple Iterator class'''
-
- __allow_access_to_unprotected_subobjects__ = 1
-
- nextIndex = 0
- def __init__(self, seq):
- self.seq = seq
- if iterInner._supports(seq, self):
- self._inner = iterInner
- self._prep_next = iterInner.prep_next
- return
- raise TypeError, "Iterator does not support %s" % `seq`
-
- def __getattr__(self, name):
- try:
- inner = getattr(self._inner, 'it_' + name)
- except AttributeError:
- raise AttributeError, name
- return inner(self)
-
- def next(self):
- if not (hasattr(self, '_next') or self._prep_next(self)):
- return 0
- self.index = i = self.nextIndex
- self.nextIndex = i+1
- self._advance(self)
- return 1
-
- def _advance(self, it):
- self.item = self._next
- del self._next
- del self.end
- self._advance = self._inner.advance
- self.start = 1
-
- def number(self): return self.nextIndex
-
- def even(self): return not self.index % 2
-
- def odd(self): return self.index % 2
-
- def parity(self):
- if self.index % 2:
- return 'odd'
- return 'even'
-
- def letter(self, base=ord('a'), radix=26):
- index = self.index
- s = ''
- while 1:
- index, off = divmod(index, radix)
- s = chr(base + off) + s
- if not index: return s
-
- def Letter(self):
- return self.letter(base=ord('A'))
-
- def Roman(self, rnvalues=(
- (1000,'M'),(900,'CM'),(500,'D'),(400,'CD'),
- (100,'C'),(90,'XC'),(50,'L'),(40,'XL'),
- (10,'X'),(9,'IX'),(5,'V'),(4,'IV'),(1,'I')) ):
- n = self.index + 1
- s = ''
- for v, r in rnvalues:
- rct, n = divmod(n, v)
- s = s + r * rct
- return s
-
- def roman(self):
- return self.Roman().lower()
-
- def first(self, name=None):
- if self.start: return 1
- return not self.same_part(name, self._last, self.item)
-
- def last(self, name=None):
- if self.end: return 1
- return not self.same_part(name, self.item, self._next)
-
- def length(self):
- return len(self.seq)
-
- def same_part(self, name, ob1, ob2):
- if name is None:
- return ob1 == ob2
- no = []
- return getattr(ob1, name, no) == getattr(ob2, name, no) is not no
-
- def __iter__(self):
- return IterIter(self)
-
-class InnerBase:
- '''Base Inner class for Iterators'''
- # Prep sets up ._next and .end
- def prep_next(self, it):
- it.next = self.no_next
- it.end = 1
- return 0
-
- # Advance knocks them down
- def advance(self, it):
- it._last = it.item
- it.item = it._next
- del it._next
- del it.end
- it.start = 0
-
- def no_next(self, it):
- return 0
-
- def it_end(self, it):
- if hasattr(it, '_next'):
- return 0
- return not self.prep_next(it)
-
-class IterInner(InnerBase):
- '''Iterator inner class for objects with Python iterators'''
-
- def _supports(self, ob, it):
- try:
- it.iter = iter(ob)
- return 1
- except:
- return 0
-
- def prep_next(self, it):
- try:
- it._next = it.iter.next()
- except StopIteration:
- it._prep_next = self.no_next
- it.end = 1
- return 0
- it.end = 0
- return 1
-
-class IterIter:
- def __init__(self, it):
- self.it = it
- self.skip = it.nextIndex > 0 and not it.end
- def next(self):
- it = self.it
- if self.skip:
- self.skip = 0
- return it.item
- if it.next():
- return it.item
- raise StopIteration
-
-iterInner = IterInner()
+import zope.deferredimport
+zope.deferredimport.deprecated(
+ "It has been renamed to ZopeIterator and moved to the "
+ "Products.PageTemplates.Expressions module. This reference will be "
+ "gone in Zope 2.12.",
+ Iterator = "Products.PageTemplates.Expressions:ZopeIterator"
+ )
More information about the Zope-Checkins
mailing list