diff options
Diffstat (limited to 'src/zope/pagetemplate/tests/batch.py')
-rw-r--r-- | src/zope/pagetemplate/tests/batch.py | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/src/zope/pagetemplate/tests/batch.py b/src/zope/pagetemplate/tests/batch.py new file mode 100644 index 0000000..ec1057c --- /dev/null +++ b/src/zope/pagetemplate/tests/batch.py @@ -0,0 +1,118 @@ +############################################################################## +# +# Copyright (c) 2001, 2002 Zope Corporation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## +"""Batching support tests + +$Id$ +""" + +class batch(object): + """Create a sequence batch""" + + def __init__(self, sequence, size, start=0, end=0, + orphan=3, overlap=0): + + start=start+1 + + start,end,sz=opt(start,end,size,orphan,sequence) + + self._last=end-1 + self._first=start-1 + + self._sequence=sequence + self._size=size + self._start=start + self._end=end + self._orphan=orphan + self._overlap=overlap + + def previous_sequence(self): return self._first + + def previous_sequence_end_number(self): + start,end,spam=opt(0, self._start-1+self._overlap, + self._size, self._orphan, self._sequence) + return end + + def previous_sequence_start_number(self): + start,end,spam=opt(0, self._start-1+self._overlap, + self._size, self._orphan, self._sequence) + return start + + def previous_sequence_end_item(self): + start,end,spam=opt(0, self._start-1+self._overlap, + self._size, self._orphan, self._sequence) + return self._sequence[end-1] + + def previous_sequence_start_item(self): + start,end,spam=opt(0, self._start-1+self._overlap, + self._size, self._orphan, self._sequence) + return self._sequence[start-1] + + def next_sequence_end_number(self): + start,end,spam=opt(self._end+1-self._overlap, 0, + self._size, self._orphan, self._sequence) + return end + + def next_sequence_start_number(self): + start,end,spam=opt(self._end+1-self._overlap, 0, + self._size, self._orphan, self._sequence) + return start + + def next_sequence_end_item(self): + start,end,spam=opt(self._end+1-self._overlap, 0, + self._size, self._orphan, self._sequence) + return self._sequence[end-1] + + def next_sequence_start_item(self): + start,end,spam=opt(self._end+1-self._overlap, 0, + self._size, self._orphan, self._sequence) + return self._sequence[start-1] + + + def next_sequence(self): + try: self._sequence[self._end] + except IndexError: return 0 + else: return 1 + + def __getitem__(self, index): + if index > self._last: raise IndexError(index) + return self._sequence[index+self._first] + +def opt(start,end,size,orphan,sequence): + if size < 1: + if start > 0 and end > 0 and end >= start: + size=end+1-start + else: size=7 + + if start > 0: + + try: sequence[start-1] + except: start=len(sequence) + + if end > 0: + if end < start: end=start + else: + end=start+size-1 + try: sequence[end+orphan-1] + except: end=len(sequence) + elif end > 0: + try: sequence[end-1] + except: end=len(sequence) + start=end+1-size + if start - 1 < orphan: start=1 + else: + start=1 + end=start+size-1 + try: sequence[end+orphan-1] + except: end=len(sequence) + return start,end,size |