Re: IndexError exception in platypus.paraparser

Germán M. Bravo <[email protected]>
Newsgroups gmane.comp.python.reportlab.user
Message-ID <CA+98EDnp2a=uM0JHYxKSHT7StgKN9tqAOfVMfiXp23YtiZAgqA@mail.gmail.com>
Please do consider changing this bit (at least I have not been having any
more problems after this patch)

On Thu, Dec 31, 2015 at 11:32 AM, Germán M. Bravo <[email protected]>
wrote:

> This definitely fixes the IndexError exception I've been getting.
>
> I applied this monkey patch to fix it:
>
> # FIXME: This monkeypatches rml2pdf.TTParagraphMixin so _parser is no
> longer
> # a shared instance of TTParser class defined as a class property
> rml2pdf.TTParagraphMixin._parser = property(lambda self: setattr(self,
> '__parser', self.__dict__.get('__parser') or rml2pdf.TTParser()) or
> self.__parser)
>
>
> On Thu, Dec 31, 2015 at 1:35 AM, Germán M. Bravo <[email protected]>
> wrote:
>
>> I'm working with ReportLab in a threaded environment and I've been
>> getting a weird exception about IndexError when doing some operations such
>> as _pop() during platypus.paraparser.ParaParser.end_br(). I think I've
>> tracked the error down the fact _stack is a member of the TTParser instance
>> (using rml2pdf).
>>
>> After googling around, I found a place where the source code of rml2pdf
>> shows this:
>>
>> class TTParagraphMixin:
>>     _CLEAN_SPACE = 0
>>     _parser = TTParser()
>>     ...
>>
>> Then, doing:
>>
>> from rlextra.rml2pdf import rml2pdf
>> print(repr(rml2pdf.TTParagraphMixin._parser))
>>
>> confirms TTParser is an instance: <rlextra.rml2pdf.rml2pdf.TTParser
>> instance at 0x1053eae18>
>>
>> This means TTParser instance there is an instance placed as a property of
>> TTParagraphMixin at class level (which means it's shared by all instances
>> of TTParagraph, TTXPreformatted and others) ...but (at least)
>> TTParser._stack could be modified by several threads at the same time
>> (causing the aforesaid exception to raise from time to time).
>>
>>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.