[Zope-CMF] Re: [dev] tools-as-utilities roadmap
Godefroid Chapelle
gotcha at bubblenet.be
Thu Jul 5 11:21:15 EDT 2007
Tres Seaver wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> yuppie wrote:
>> Hi!
>>
>>
>> Godefroid Chapelle wrote:
>>>> After some back and forth CMF 2.1 will just mark the first step of the
>>>> tools-as-utilities refactoring. We now have a working
>>>> five.localsitemanager that adjusts the persistent components
>>>> registries to Zope 2, but right now only a few CMF tools can be used
>>>> as utilities. Many tool methods depend on self.REQUEST, which is not
>>>> available in utilities.
>>>>
>>>> The current state makes things more complex, not easier. So we need to
>>>> move on:
>>>>
>>>>
>>>> Scenario 1:
>>>> -----------
>>>>
>>>> We declare all tool methods that use self.REQUEST instead of an
>>>> explicit REQUEST argument as broken. And fix the tools by adding new
>>>> REQUEST arguments. I guess one or two dozen methods would need that
>>>> change in CMF, many more in third party products.
>>>>
>>>> We can add these arguments as optional arguments in CMF 2.1 and make
>>>> them required after a deprecation period. If you use only tools shipped
>>>> with CMF or adjusted to the new policy, you can start using getUtility
>>>> in CMF 2.1. If not, CMF 2.3 will be the first release that allows to
>>>> use getUtility for all tools.
>>>>
>>>> Pros: The changes are simple, in CMF 2.3 we are done.
>>>>
>>>> Cons: A lot of code needs to be modified. Especially third party code.
>>>>
>>> Scenario 1+2 :
>>>
>>> The methods that depend on REQUEST are moved to browser views as below
>>> instead of quickly fixed as in the scenario above. They can then be
>>> deprecated on the tool.
>>>
>>> Once a tool has been fixed as utility and views, we should deprecate its
>>> use as tool (this might be implicit in the scenario above).
>> There are many tool methods that depend on REQUEST, but most of them
>> take it as argument, not from the acquisition context. Separating all
>> these methods cleanly in utility methods and views will mean replacing
>> the tools by something new, not converting them to utilities.
>
> Any method which already takes REQUEST as an argument can be left alone
> for now.
Right
> I think Godefroid was arguing that methods which expect to be able to
> acquire 'REQUEST' should be converted to view methods.
Good : you clarify my thoughts.
> Some methods are
> "indirect" dependents (they call somthing which acquires REQUEST). I
> think we'd handle those by turning them into view lookups (ideally), or
> by continuing to call the deprecated API (see below), perhaps
> suppressing the message.
suppressing which message ? the deprecation ?
>
>>> Pros: migration achieves better separtion of concerns
>>>
>>> Cons: longer time to migrate away from tools (which will be long anyway,
>>> as so many 3rd party products have some of those and the understanding
>>> of the patterns will take time to percolate in the community.
>> I'm afraid we don't have enough volunteers to implement this scenario.
>> Tools depend on each other and if your tool depends on a non-utility
>> tool you can't make it a utility. The quick fix I propose makes it easy
>> to start the migration - we can split off views later. And the pattern
>> is very simple: Adding REQUEST arguments where REQUEST is used.
>>
>> A bird in the hand is worth two in the bush.
>
> I think we have to leave existing REQUEST-acquiring APIs alone, but
> deprecate them, and then implement them by calling *new* REQUEST-passing
> APIs. I would rather add methods than add hackery around the default
> REQUEST argument, as it keeps the deprecation story cleaner.
>
+1
>
> Tres.
--
Godefroid Chapelle (aka __gotcha)- BubbleNet http://bubblenet.be
More information about the Zope-CMF
mailing list