[Zope-CMF] Extending FTI.isConstructionAllowed
Wichert Akkerman
wichert at wiggy.net
Tue Jun 2 07:21:30 EDT 2009
Previously Tres Seaver wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Wichert Akkerman wrote:
> > I have a use case where I need to put additional restrictions on object
> > creation, in particular I need to restrict the maximum depth of items
> > inside of a container of a specific type. The ideal place to put such a
> > restriction seems to be the isConstructionAllowed method on the FTI.
> > Currently this method is not very extensible, which leads to complicated
> > code in various FTI types.
> >
> > I am considering to add an extension point here, something like this:
> >
> > class ITypeConstructionFilter(Interface):
> > def __init__(fti, container):
> > """Adapt on the FTI of the object being created and the target
> > container"""
> >
> > def allowed():
> > """Check if construction is allowed."""
> >
> >
> > current checks such as the workflow check that was added in CMF 2.2, or
> > the type constraint logic Plone has in ATContentTypes could be moved to
> > such an adapter. The standard isConstructionAllowed method could then
> > query all registered adapters to check if construction should be possible.
> >
> > Does this sound sensible?
>
> I'm not sure about querying all adapters: I think it would be clearer
> to query the one adapter whose name corresponds to the type name of the
> FTI (the "query all" case leads to tricky / emergent behavior).
Querying a single adapter makes it very hard to use this as an extension
point. Being able to have multiple independent validation-hooks is the
whole point of my suggestion, and being able to only use a single
adapter would make that impossible.
Wichert.
--
Wichert Akkerman <wichert at wiggy.net> It is simple to make things.
http://www.wiggy.net/ It is hard to make things simple.
More information about the Zope-CMF
mailing list