[Zope-dev] Acquisition/cDocumentTemplate bug
Shane Hathaway
shane@digicool.com
Mon, 17 Jul 2000 08:52:24 -0400
Brian,
This is an excellent bug analysis. I suggest that we create a new
PyCallable_Check function that works in the presence of wrappers,
perhaps called PyCallable_CheckW(). If it is placed in Acquisition.c
then cDocumentTemplate.c will have to #include "Acquisition.h". Then
we need to replace PyCallable_Check in probably more than just
cDocumentTemplate.
Shane
Dieter Maurer wrote:
>
> Recently, several posters have reported strange "AttributeError __call__"
> exceptions.
>
> The most precise was a report by Oleg Broytmann:
>
> /index_html DTML Document
> <dtml-var standard_html_header>
> /standard_html_header DTML Method
> <dtml-with sub></dtml-with>
> /sub Folder
>
> When he calls "/sub/index_html", he gets this
> "AttributeError __call__" for "sub".
>
> He observed the problem on Zope 2.1.4 and 2.2a4.
>
> I partially analysed this problem report under Zope 2.1.6:
>
> In "MM_cget", "sub" is retrieved as an "ImplicitAcquirerWrapper"
> (correct).
>
> In line 373, however, "PyCallable_Check(sub)" returned "1",
> which is probably wrong, because a folder is not callable.
> The "ImplicitAcquirerWrapper"'s "tp_call" mislead
> "PyCallable_Check".
>
> In line 376, the attribute "py_isDocTemp" is looked up
> and succeeds. Therefore, the folder "sub" is seen as
> a Document Template, which definitely is not true.
> The following call fails because it arrives at CallMethodO in
> "Acquisition.c:119" which looks for a non-excisting "__call__" method.
>
> Dieter