[Checkins] SVN: zc.form/trunk/src/zc/form/field.py added test for BaseField, showing necessity to call super before setting default value (otherwise the assertion in default setter will fail in super when setting the default default value of None on the property)

Michael Howitz mh+zope at gocept.com
Wed Apr 25 08:40:11 EDT 2007


Log message for revision 74753:
  added test for BaseField, showing necessity to call super before setting default value (otherwise the assertion in default setter will fail in super when setting the default default value of None on the property)

Changed:
  U   zc.form/trunk/src/zc/form/field.py

-=-
Modified: zc.form/trunk/src/zc/form/field.py
===================================================================
--- zc.form/trunk/src/zc/form/field.py	2007-04-25 12:18:57 UTC (rev 74752)
+++ zc.form/trunk/src/zc/form/field.py	2007-04-25 12:40:10 UTC (rev 74753)
@@ -51,7 +51,34 @@
         return self.message
 
 class BaseField(schema.Field):
+    """Field with a callable as default and a tuple of constraints.
 
+    >>> def secure_password(field, value):
+    ...     if len(value) < 8:
+    ...         raise schema.ValidationError, 'Password too short.'
+    ...
+    >>> class IDummy(interface.Interface):
+    ...     suggested_password = BaseField(
+    ...         title=u'Suggested Password',
+    ...         default_getter=lambda context: u'asdf',
+    ...         constraints=(secure_password, ))
+    ... 
+    >>> f = IDummy['suggested_password'].bind(None) # use None as context
+    >>> interfaces.IExtendedField.providedBy(f)
+    True
+    >>> f.__name__
+    'suggested_password'
+    >>> f.title
+    u'Suggested Password'
+    >>> f.default
+    u'asdf'
+    >>> f.validate(u'123456789')
+    >>> f.validate(u'asdf')
+    Traceback (most recent call last):
+    ...
+    ValidationError: Password too short.
+    """
+
     interface.implements(interfaces.IExtendedField)
 
     constraints = ()
@@ -62,8 +89,8 @@
         if default_getter is not None and 'default' in kw:
             raise TypeError(
                 'may not specify both a default and a default_getter')
+        super(BaseField, self).__init__(**kw)
         self.default_getter = default_getter
-        super(BaseField, self).__init__(**kw)
 
     def _validate(self, value):
         super(BaseField, self)._validate(value)



More information about the Checkins mailing list