[Zope] Odd behaviour with lexicons and ZCTextIndex

Dieter Maurer dieter@handshake.de
Tue, 22 Jul 2003 23:18:30 +0200


Paavo Parkkinen wrote at 2003-7-21 19:47 +0300:
 > On ke, 09.07.2003 at 20:55 +0200, Dieter Maurer wrote:
 > 
 > > Is it possible that your "ZCatalog" is not yet acquisition wrapped
 > > when you call "addIndex"?
 > 
 > I finally had some time to take a look at this problem a little
 > deeper, and it seems that the ZCatalog is not aquisition wrapped
 > when calling 'addIndex'. This problem seems to be fixed in 2.7.0-a1.
 > 
 > Here's a patch for the 2.6.1 users:
 > 
 > --- ZCatalog.py.orig    2003-07-21 19:31:55.000000000 +0300
 > +++ ZCatalog.py 2003-07-21 19:45:21.000000000 +0300
 > @@ -894,7 +894,7 @@
 >          # for new index types is to use an "extra" record.
 >  
 >          if 'extra' in base.__init__.func_code.co_varnames:
 > -            index = base(name, extra=extra, caller=aq_base(self))
 > +            index = base(name, extra=extra, caller=self)
 >          else:
 >              index = base(name, aq_base(self))

The same problem is also in the "else:" clause.


There is another bug in this code (which is horrible under all accounts):

  "co_varnames" is used as if it were the sequence of arguments.
  However, as the name clearly suggests: it is the sequence
  of (all) variables in the code objects. This includes
  arguments and local variables.

  If "base" does not have an "extra" argument but a local
  variable called "extra", the code above will fail with
  a "TypeError: unexpected keyword argument 'extra'".
  
  This error is not very likely but when it happens deep
  Python Zen is necessary to understand what happened.


Dieter