[reportlab-users] PageTemplate unexpectedly copies Frames from earlier PageTemplates
Nate Silva
nate at desi.com
Mon Nov 30 19:23:16 EST 2009
I've been pulling my hair out and finally boiled it down to the following snippet. Is this a bug?
I create a PageTemplate and add some Frames to it. So far so good. Then I create a second PageTemplate. For some reason, it inherits all of the Frames that were assigned to the first PageTemplate.
This happens when I append frames:
template1 = Template(id='template1')
template1.frames.append(Frame(...))
template2 = Template(id='template2')
template2.frames.append(Frame(...))
# template2 now unexpectedly has TWO Frames: the one from
# template1 and the one that was added to template2.
The bug does not happen if I pass the Frames to the Template constructor:
template1 = Template(id='template1', frames=[Frame(...)])
template2 = Template(id='template2', frames=[Frame(...)])
# This works as expected. template1 and template2 each have one
# frame.
Here is a complete Python program that demonstrates the problem.
----
from reportlab.platypus import *
def main():
template1 = PageTemplate(id='template1')
template1.frames.append(Frame(0, 0, 10, 20, id='t1_f1'))
template1.frames.append(Frame(30, 40, 50, 60, id='t1_f2'))
template2 = PageTemplate(id='template2')
template2.frames.append(Frame(1, 1, 11, 21, id='t2_f1'))
template2.frames.append(Frame(32, 42, 52, 62, id='t2_f2'))
# I expect to see two frames, but there are actually four.
# All of the frames from template1 have been copied into
# template2.
print [f.id for f in template2.frames]
if __name__ == '__main__':
main()
----
Test System #1: Mac OS X 10.6.2, Python 2.6.1 (64-bit), ReportLab 2.3
Test System #2: Debian Linux 5.0.3, Python 2.5.2 (64-bit), ReportLab 2.3
Regards,
Nate
More information about the reportlab-users
mailing list