Please submit the patch (+ unittest) to the bug collector. Otherwise it might get lost. -aj --On Montag, 22. März 2004 13:09 Uhr +0100 AP Meyer <a.p.meyer@fel.tno.nl> wrote:
Hi Zopers
It seems that there is a bug in ZTUtil.Batch: when the batch should be the length of the batch and there are exactly as many orphans as there would fit on one page the length of the batch becomes size instead of size+orphans.
Here are the numbers:
no of batches start end orphan length sequence_length 1 1 12 3 12 12 1 1 10 3 10 13 <<< WRONG * 2 1 10 3 10 14
* end and length should be 13 in this case, 3 items are omitted
length=12 length=13 length=14 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 | second batch 12 12 | 13 | 14 |
So, there is a jump on the edge where there should be one batch of the length sequence_length == length+orphans. At that point 3 (in the above case) items disappear. I have looked at the code in ZTUtils.Batch.py and found the following solution (line 109):
94 def opt(start,end,size,orphan,sequence): 95 if size < 1: 96 if start > 0 and end > 0 and end >= start: 97 size=end+1-start 98 else: size=7 99 100 if start > 0: 101 102 try: sequence[start-1] 103 except IndexError: start=len(sequence) 104 105 if end > 0: 106 if end < start: end=start 107 else: 108 end=start+size-1 109 #try: sequence[end+orphan-1] 110 try: sequence[end+orphan] # replace above with this 111 except IndexError: end=len(sequence) 112 ...
Can somebody confirm that this solution is correct and modify it in the CVS, please?
NB This has been run in Zope 2.7 with Python 2.3.3.
thanks Andre