OK I think I found the actual intent of aq_base() in _checkId of PlugIns.py: if hasattr(aq_base(self), id): # The object is located in this ObjectManager. if not flags & REPLACEABLE: raise 'Bad Request', ('The id "%s" is invalid - ' \ 'it is already in use.' % id) # else the object is replaceable even if the UNIQUE # flag is set. elif flags & UNIQUE: raise 'Bad Request', \ ('The id "%s" is reserved.' % id) it comes from the ObjectManager _checkId which has basically the same code execpt it ObjectManager.py also has the needed: from Acquisition import aq_base which PlugIns.py does not.. so looking at Acquisition.c it appears that there is no real difference between hasattr(aq_base(self), id) which calls if (WRAPPER(self)->obj) { r=WRAPPER(self)->obj; while (isWrapper(r) && WRAPPER(r)->obj) r=WRAPPER(r)->obj; } else r=Py_None; Py_INCREF(r); return r; and hasattr( self.aq_base, id) which calls case 'b': if (strcmp(name,"base")==0) { if (self->obj) { r=self->obj; while (isWrapper(r) && WRAPPER(r)->obj) r=WRAPPER(r)->obj; } else r=Py_None; Py_INCREF(r); return r; } break; Anyway.. it looks like either fix is OK... I guess! -steve
"Steve" == Steve Spicklemire <steve@spvi.com> writes:
Steve> ZPatterns 0.4.2a1 PlugIns.py bug? Steve> I get a 'Name Error' aq_base when I hit the following code Steve> while trying to update the index_html method of one of my Steve> Specialists from CVSMixin.. I think that this would get hit Steve> anytime you add an object whose id is already in the Steve> acquisition path.... Steve> -steve Steve> diff -c -r1.1.1.2 PlugIns.py *** PlugIns.py 2000/09/04 Steve> 14:17:29 1.1.1.2 --- PlugIns.py 2000/09/04 18:53:17 Steve> *************** *** 265,271 **** # An object by the given Steve> id exists either in this # ObjectManager or in the Steve> acquisition path. flags = getattr(obj, '__replaceable__', Steve> NOT_REPLACEABLE) ! if hasattr(aq_base(self), id): # The Steve> object is located in this ObjectManager. if not flags & Steve> REPLACEABLE: raise 'Bad Request', ('The id "%s" is invalid Steve> - ' \ --- 265,271 ---- # An object by the given id exists Steve> either in this # ObjectManager or in the acquisition path. Steve> flags = getattr(obj, '__replaceable__', NOT_REPLACEABLE) ! Steve> if hasattr(self.aq_base, id): # The object is located in Steve> this ObjectManager. if not flags & REPLACEABLE: raise 'Bad Steve> Request', ('The id "%s" is invalid - ' \ Steve> _______________________________________________ Zope-Dev Steve> maillist - Zope-Dev@zope.org Steve> http://lists.zope.org/mailman/listinfo/zope-dev ** No cross Steve> posts or HTML encoding! ** (Related lists - Steve> http://lists.zope.org/mailman/listinfo/zope-announce Steve> http://lists.zope.org/mailman/listinfo/zope )