Changeset 234

Show
Ignore:
Timestamp:
07/04/06 14:53:06 (3 years ago)
Author:
matt
Message:

Move the validation of the entered data to the field. The same code was
repeated at the end of every widget's processInput method anyway (a clear sign
it was in the wrong place) but allowing the widget to trigger validation makes
it hard for a composite type to reuse input processing and validation nicely.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/composite/formal/form.py

    r231 r234  
    123123            return 
    124124 
    125         # Process the input using the widget, storing the data back on the form. 
     125        # Process and the input using the widget, validate the value, and store 
     126        # the data back on the form. Either of these can raise a FieldError. 
    126127        try: 
    127             form.data[self.key] = self.makeWidget().processInput(ctx, self.key, args) 
     128            processed = self.makeWidget().processInput(ctx, self.key, args) 
     129            form.data[self.key] = self.type.validate(processed) 
    128130        except validation.FieldError, e: 
    129131            if e.fieldName is None: 
  • branches/composite/formal/widget.py

    r231 r234  
    5353    def processInput(self, ctx, key, args): 
    5454        value = args.get(key, [''])[0].decode(util.getPOSTCharset(ctx)) 
    55         value = iformal.IStringConvertible(self.original).toType(value) 
    56         return self.original.validate(value) 
     55        return iformal.IStringConvertible(self.original).toType(value) 
    5756 
    5857 
     
    9190        if not value: 
    9291            value = 'False' 
    93         value = iformal.IBooleanConvertible(self.original).toType(value) 
    94         return self.original.validate(value) 
     92        return iformal.IBooleanConvertible(self.original).toType(value) 
    9593 
    9694 
     
    142140    def processInput(self, ctx, key, args): 
    143141        value = args.get(key, [''])[0].decode(util.getPOSTCharset(ctx)) 
    144         value = iformal.IStringConvertible(self.original).fromType(value) 
    145         return self.original.validate(value) 
     142        return iformal.IStringConvertible(self.original).fromType(value) 
    146143 
    147144 
     
    186183            if pwds[0] != pwds[1]: 
    187184                raise validation.FieldValidationError('Passwords do not match.') 
    188         return self.original.validate(pwds[0]) 
     185        return pwds[0] 
    189186 
    190187 
     
    218215        if self.noneOption is not None and value == self.noneOption[0]: 
    219216            value = None 
    220         return self.original.validate(value) 
     217        return value 
    221218 
    222219 
     
    369366        if self.noneOption is not None and value == self.noneOption[0]: 
    370367            value = None 
    371         return self.original.validate(value) 
     368        return value 
    372369 
    373370 
     
    533530            except ValueError, e: 
    534531                raise validation.FieldValidationError("Invalid date") 
    535         ymd = iformal.IDateTupleConvertible(self.original).toType(ymd) 
    536         return self.original.validate(ymd) 
     532        return iformal.IDateTupleConvertible(self.original).toType(ymd) 
    537533 
    538534 
     
    609605                value[0] = 2000 + value[0] 
    610606            value.append(1) 
    611         value = iformal.IDateTupleConvertible(self.original).toType( value ) 
    612         return self.original.validate(value) 
     607        return iformal.IDateTupleConvertible(self.original).toType( value ) 
    613608 
    614609 
     
    674669        values = args.get(key, []) 
    675670        converter = iformal.IStringConvertible(self.original.type) 
    676         values = [converter.toType(v) for v in values] 
    677         return self.original.validate(values) 
     671        return [converter.toType(v) for v in values] 
    678672 
    679673 
     
    706700        value = (name, fileitem.file) 
    707701 
    708         value = iformal.IFileConvertible(self.original).fromType(value) 
    709         return self.original.validate(value) 
     702        return iformal.IFileConvertible(self.original).fromType(value) 
    710703 
    711704 
     
    770763           value = args.get(namer('value'))[0] 
    771764 
    772         value = iformal.IStringConvertible(self.original).fromType(value) 
    773         return self.original.validate(value) 
     765        return iformal.IStringConvertible(self.original).fromType(value) 
    774766 
    775767 
     
    922914        # original file meet a required field validation? 
    923915        value = resourceManager.getResourceForWidget( key ) 
    924         value = self.convertibleFactory(self.original).toType( value ) 
    925         return self.original.validate( value ) 
     916        return self.convertibleFactory(self.original).toType( value ) 
    926917 
    927918    def _registerWithResourceManager( self, key, args, resourceManager ): 
     
    992983    def processInput(self, ctx, key, args): 
    993984        value = args.get(key, [''])[0].decode(util.getPOSTCharset(ctx)) 
    994         value = iformal.IStringConvertible(self.original).toType(value) 
    995         return self.original.validate(value) 
     985        return iformal.IStringConvertible(self.original).toType(value) 
    996986 
    997987