[TransWarp] Constraints on model attributes

Phillip J. Eby pje at telecommunity.com
Sat Jul 26 15:44:34 EDT 2003

At 06:43 PM 7/26/03 +0200, Roché Compaan wrote:
>How does one define constraints for model attributes? Last time you talked
>about this was back in January.

If you have a mdl_normalize() method on a feature's  'referencedType', it 
is called with any value assigned to the feature (or added, if the feature 
is a collection).  You can also define cardinality via a feature's 
lowerBound and upperBound attributes.

Currently, to get any validation apart from cardinality and type 
constraints, you have to define _onLink()/_onUnlink() methods, which are 
also called when changes are made to a feature.

>I am very impressed by Zope 3's schema support and the ability to
>generate web forms based on the schema - you can imagine that it saves a
>lot of repetitive template coding. I think it is possible to do the same
>with PEAK the only difference being that one will generate forms using
>PEAK's model semantics.

As you might notice, a fair amount of PEAK's model system was designed with 
that in mind.  Things like 'mdl_features' on model.Type classes, so you can 
easily iterate over a class' feature metadata.  You can also define the 
sorting order of features.

The one thing that I didn't really think about was that you can't 
necessarily select what type of form widget should be used for something, 
based solely on the data types.

>I am very familiar with Formulator and the form generation code in Zope
>3 and it would be rather trivial to implement something like it for

That's good to hear; I've been worried about that.

>Being able to define constraints for attributes on a model element
>is required to validate form values.

Look at the methods that feature objects have, especially toString(), 
fromString(), and normalize().  If you run into any issues, let me know, 
and I'll see what I can do to strengthen up the framework.

More information about the PEAK mailing list