"""Demo for using FormEncode with Webware.""" # Tested with Webware 1.1 and FormEncode 1.2.2 from formencode import compound, Invalid, htmlfill, Schema, validators from WebKit.Examples.ExamplePage import ExamplePage form_template = '''

Tell me about yourself



Your favorite color:
Red   Blue   Black   Green

''' class FormSchema(Schema): name = validators.String(not_empty=True) age = validators.Int(min=13, max=99) color = compound.All(validators.Set(), validators.OneOf(['red', 'blue', 'black', 'green'])) class FormExample1(ExamplePage): """Demo for using FormEncode with Webware.""" def getDefaults(self): return dict(age='enter your age', color=['blue']) def writeStyleSheet(self): ExamplePage.writeStyleSheet(self) self.writeln('''''') def awake(self, trans): ExamplePage.awake(self, trans) if self.request().hasField('name'): fields = self.request().fields() try: fields = FormSchema.to_python(fields, self) except Invalid, e: errors = dict((k, v.encode('utf-8')) for k, v in e.unpack_errors().iteritems()) else: errors = None else: fields = self.getDefaults() errors = None self.rendered_form = htmlfill.render(form_template, defaults=fields, errors=errors) def writeContent(self): self.write(self.rendered_form)