summaryrefslogtreecommitdiff
path: root/src/zope/pagetemplate/tests/batch.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/zope/pagetemplate/tests/batch.py')
-rw-r--r--src/zope/pagetemplate/tests/batch.py118
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