[Zope3-dev] Form framework, adapters and pau
Dominik Huber
dominik.huber at projekt01.ch
Fri Apr 8 10:04:56 EDT 2005
Jim Fulton wrote:
> Whether something is trusted or not is an implementation decision of the
> adapter.
Yup.
But if developer 'A' writes a framework such as the form framework, he
does not implement the adapter himself. The adapters are implemented by
others within different application for example developer 'X' and 'Y'.
So the code of 'A' adapts something:
>>> adapted = ISomething(context)
>>> doLocationSensitiveStuff(adapted)
'A' is not able to influence the implementations of 'X' and 'Y'
ISomething-adapters. If 'X' or 'Y' does register an
none-public-untrusted adapter 'A's framework will fail.
So 'A' has to force anyway all adapters to be locatable, if he wants
handle this bug situation:
>>> locatetable_adapted = assertLocation(ISomething(context), context)
>>> doLocationSensitiveStuff(locatetable_adapted)
I thougth, you (Jim) wanted to ban such dedicated location proxy stuff
out of the code. Therefore you proposed the trusted adapter factory
solution. My exclusive objection is that we don't get rid of specific
location assertions within frameworks unless we make all adapters locatable.
[...]
> So are you agreeing with the proposal to add location proxies
> in the adapter factory and not in the form machinery?
No. IMO we can not solve the problem correctly doing the location
proxies inside the trusted adapter factory, because their might be a few
untrusted adapters that requires a dedicated permission, too. So we have
to do the proxying inside the trusted adapter factory and inside the
form machinery and that's kind of pointless to me.
>>> location helper function:
>>> + Performance: We don't have to build location proxies all the time
>>> + Explicitness: Excplicit in relation to the location issue after
>>> adaption
>>> 0 Developer: Have to be aware of the location issue
>>>
>>> assert a location to all trusted adapters:
>>> 0 Performace: Ok because only the trusted adapters are affected
>>> - Explicitness: Implicit in relation to the location issue after
>>> adaption
>>
> This doesn't make any sense to me.
>
> If a programmers uses the trusted adapter facility, they do so exlicitly.
> The trusted adapter facility is documented to provide location.
The mail before I asked you (Jim):
How can I ask for trusted adapters explicitly inside a framework such as
edit view?
Your answer: You can't.
May that's the key for our mutual misunderstanding (and of course my
english) :)
>> assert a location to all adapters:
>> - Performance: Diffinitaly an overhead
>> + Explicitness: Excplicit in relation to the location issue after
>> adaption
>
>
> No, this is very implicit. It messes with *all* adapters, which is
> way too intrusive.
IMO the mess starts when I don't know what I'm going to get *extra* out
of an adapter call, for example
>>> adapted = ISomething(context)
and I have to introspect the result set before I can proceed because I
might get an location for free ;)
In all those cases where ISomething does not extend ILocation, it's
pretty implicit to asume to have gotten a locatin too, except their
would be the absolute rule and single exception ILocation is provided in
any case.
If we like to solve such a problem explicitly without such absolute
commitments, we have to invent beside the existing Multi*For*Adapters
the Multi*Provides*Adapters:
>>> something_with_location = zapi.queryMultiProvideAdapter(context,
(ISomething, ILocation))
or
>>> something_with_location =
zapi.queryMultiForAndProvideAdapter((context,), (ISomething, ILocation))
IMO such a solution would be explicit with no bad aftertaste, but it
will probably break a few basic registry implementations.
> Keep in mind too that proxies suck. They are deep magic, like
> metaclasses.
> Like metaclasses, they provide a powerful tool to solve extra hard
> problems,
> but they should be used sparingly.
YUP! Because the location proxying within the trusted adapter factory
does not solve all my problems and I have still to go with dedicated
framework solutions like proposed in the form machinery. I would suggest
to straiten for dedicated framework solutions only and offer a helper
function only.
Regards,
Dominik
More information about the Zope3-dev
mailing list