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?

Question: zope.container.constraints handles this in a different way, 
using a precondition defined in the interface. Did you have a look at 
that code? If we switch to that pattern, we could use different 
preconditions for containers with different interfaces. Would that be 
sufficient for your use case?

Cheers, Yuppie

Zope-CMF maillist  -  Zope-CMF@lists.zope.org

See https://bugs.launchpad.net/zope-cmf/ for bug reports and feature requests

Reply via email to