[Zope-CMF] CMF 1.4 Roadmap

Jeffrey P Shell jeffrey@cuemedia.com
Thu, 30 Jan 2003 16:45:15 -0700


On Thursday, January 30, 2003, at 01:15  AM, Yuppie wrote:

>>> 2.) DCWorkflow integration
>>> --------------------------
> [...]
>> It has been a goal to ship DCWorkflow as part of CMF for quite a while
>> now;  we had some additional goals which made it harder than just
>> including the product in the release tarball:
>>   - We wanted to rename the product to 'CMFWorkflow'.

-1.  While DCWorkflow doesn't make much sense nowadays with the 
renaming of DC=>ZC, DCWorkflow (as mentioned below) is 'just' another 
workflow agent type for the Workflow Tool.  Calling it CMFWorkflow 
would make it sound like it was *the* only option.  Sometimes, being 
able to write a full custom agent in Python is a better path.  For a 
very complex action/planning workflow, I know I found this to be the 
case.

>>   - Any rename (see below) requires a mandatory conversion script to
>>     repair persistent instances which "knew" the old location of their
>>     classes.
>>> ChrisW proposed to move DCWorkflow to CMFCore. What do other people 
>>> think? Any volunteers to work on this?
>> -1 Putting it into a different package will mean breaking lots of
>> sites:  the workflow instances in the ZODB know that their class can 
>> be
>> found in 'Products.DCWorkflow'.
> CMFWorkflow needs a conversion script, CMFCore needs one. Can't see 
> any difference and why the first is what you want and the second one 
> is -1.
>
> DCWorkflow is 'just' an other workflow for CMFCore.WorkflowTool, so 
> why does it need to be a product on it's own if we have to write a 
> conversion script anyway?
>
> But from a more pragmatic point of view: If the renaming blocks 
> integration for an other release (or for ever), I could also live with 
> the name DCWorkflow.

Actually, the ZODB (or maybe it's a Pickle thing) helps out here with 
the concept of "module aliases".  In CMFCore.__init__.py, one could 
include::

import DCWorkflow    # Local package - CMFCore/DCWorkflow

__module_aliases__ = (
     ('Products.DCWorkflow.foo', DCWorkflow.foo),
     )

It has to be more thought out than that, obviously, but that's the gist 
of it - map an old module name to a new module object.  This has been 
around for a long time - the primary place I remember seeing it was in 
support for the renaming of Aqueduct (from whence came database 
adapters and SQL Methods) when Zope was open sourced.  A lot of 
renaming went on between Principia 1.8bN (1,8 never had a final 
release) and Zope 1.9 (the first Zope release), but all existing code 
continued to run due to tricks like this.