"""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
'''
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)