Browser views: inherit from object or BrowserView from Five/Plone
Daniel Nouri
daniel.nouri at gmail.com
Thu Apr 26 22:24:08 UTC 2007
Martin Aspeli wrote:
>
>
> Maurits van Rees-3 wrote:
>> Rocky, on 2007-04-22:
>> Two thoughts after a conversation with Jean-Paul Ladage who had a
>> conversation with Daniel Nouri :)
>>
>> 1. context might need to be callable
>>
>
> Context needs to be the context content object. I don't see any requirement
> that it should be callable. But IBrowserView (or rather, things it derives
> from) specifies that 'context' is the object (and not a list as in the
> CMFPlone.utils.BrowserView base class)
Reinout means: It should be a property.
>> 2. Would it not be better if Five took care of all aq stuff, like
>> wrapping context in aq_inner?
>>
>
> It can't. No matter what you put in self.context, the wrapping happens on
> *retrieval* so if self inherits from Acquisition.Explicit, when you do
> self.context you get back context aq-wrapped in self.
I would experiment and look at aq_chain for a context that's a property that
returns 'aq_inner(self._context)'. Needless to say, I'd prefer this option
if it works because it's the natural way to get context.
>> Combining these two thoughts in Five/browser/__init__.py :
>>
>> from Acquisition import aq_inner
>> class BrowserView(Acquisition.Explicit,
>> zope.app.publisher.browser.BrowserView):
>> """Five browser view
>>
>> Mixes in explicit acquisition so that security can be acquired for
>> views"""
>>
>> def __init__(self, context, request):
>> self._context = context
>> self.request = request
>>
>> @property
>> def context(self):
>> return aq_inner(self._context)
>>
>
> Unfortunately, acquisition doesn't work properly inside Python property
> __get__ accessors. I've seen this pattern before, but I've seen people have
> various problems with it (that I can't remember the details of right now).
Hmm, I've been using @property now for quite a long time for handling
context without any problems. It would be good to have a minimal failing
example.
I know that formlib actions, which are applied via a decorator, have
problems with acquisition. But then, they do much more than @property.
--
http://danielnouri.org
More information about the Product-Developers
mailing list