[Zope-CMF] dev question on CMFDefault.__init__.py
hazmat
hazmat@objectrealms.net
Mon, 21 Oct 2002 16:57:48 -0700
On Monday 21 October 2002 07:22 am, Tres Seaver wrote:
> On Mon, 2002-10-21 at 09:02, Mark McEahern wrote:
> > [Florent Guillaume]
> >
> > > As one datapoint, the main body of __init__ is called at module
> > > initialization, which is very early. initialize() is called by Product
> > > initialization, which is done later by Zope.
> > >
> > > But I don't know the precise details of ZClasses initialization (and
> > > frankly the less I hear about ZClasses, the happier I am).
> >
> > Here are a couple of concrete questions I have:
> >
> > 1. On line 110, a module level variable is created to store globals, but
> > then it's not used:
> >
> > cmfdefault_globals=globals()
> >
> > Why is that assignment even there?
>
> So that other modules can import it, and use it to find where on the
> filesystem the CMFDefault product lives.
i've always wondered why this doesn't use package_home to leave the actual
path, instead of saving a reference to the globals... any particular reason?
all the things that take globals, take a path prefix as well.
at this point its probably moot, as its already been sacrificed on the alter
of backwards compatiblity.
<snip>
>
> > [hazmat]
> >
> > > many things are non obvious when your using talking about zclasses,
> > > imo. i'd imagine the placement of the initialziation stuff is either
> > > chance, or because of ordering requirements.
> >
> > This seems very fragile, then, insofar as CMFDefault is intended to be a
> > demonstration of CMF. I would love to help improve it, but I'm trying to
> > understand it first. <wink>
>
> Some of the cruft there comes from working around problems with
> order-of-initialization issues for ZClass-based development. "Fixing"
> it is problematic, as the symptoms are tough to reproduce (they can
> depend, for instance, on the physical order of directory entries in the
> 'Products' directory!).
i think by physical order, you really meant lexographical sort order of
directory name strings as according to python :-)
> > [hazmat]
> >
> > > if your interested in initialization as a matter of writing your own
> > > products, i would take a look at some of the other cmf products.
> >
> > I'm more interested currently in customizing a CMF portal. I can't use
> > CMFDefault out of the box because I want to use DCWorkflow. When I add
> > the portal to the Root Zope site, I don't want to have to manually delete
> > the default workflow and step-by-step recreate the one I want in the ZMI.
> > Instead, I'd like to have that packaged. You suggested using an External
> > Method, which I appreciate. I like the CustomizationPolicy idea that
> > Plone has and I'm trying to understand how to add that to CMFDefault.
> > Which is why I'm trying to understand __init__.py. Perhaps it was only
> > intended as a black box, though?
>
> There are several ideas kicking around for managing the "site setup"
> problem:
>
> - In your own product, write a "Portal Generator" and register it as
> a ZMI-addable object (this is how Plone's stuff works, I think).
yup.
> - Add ExternalMethods to register new, add-on products (this is how
> the CMFCalendar product is added to a site, by default).
>
> - Add a tool which manages the add-on products. Adrian Hungate has a
> proposal for such a beast, and a working implementation:
>
> <http://www.haqa.co.uk/Software/cvs/Products/CMFInstaller>
cool, this is on the add list for the core in cmf1.4 i believe?
> - We are working on a tool for a current consulting gig which
> synchronizes tool configurations between the filesystem and the
> ZODB, using XML files to represent the serialized configurations.
> The tool also manages other "setup steps" as callables, and keeps
> track of "last run" times, as well as dependencies. We probably
> won't have time to release this tool in the near term, but I think
> that (perhaps in conjunction with Adrian's tool) it would go a
> long way toward solving the "site configuration management" issue.
sounds very cool, part of the this is in public cvs
http://cvs.zope.org/Packages/ZConfig/
whats more interesting (as least to me ;-) is that i wrote something very
similiar for a client to solve the same problem (perhaps for different
reasons). i'll open source it latter today. i've been holding off because i
haven't made the time to document it, but as there is a real need i think for
this type of software, i'm just going to release it. i eschewed xml (as it
appears zconfig does), and focused generically on assembling functions into
structures (graphs, trees, sets) with logging, dependencies, and structure
nesting.
-haz