From b2f3bae749aa55f384cd167ecf85387ae9fb2e09 Mon Sep 17 00:00:00 2001 From: Ferry Boender Date: Wed, 1 Apr 2015 09:01:28 +0200 Subject: [PATCH] Improved field validation and new field options for textarea. Original file names of uploaded files are now stored in an additional field __name. --- src/scriptform.py | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/src/scriptform.py b/src/scriptform.py index 7f3a7d1..60a3dd9 100755 --- a/src/scriptform.py +++ b/src/scriptform.py @@ -6,6 +6,8 @@ # - Validate field values properly. # * Integer/float min, max # * Uploaded files mime-types/extensions +# - Radio field type has no correct default value. +# - Default values for input fields. import sys import optparse @@ -66,7 +68,7 @@ html_header = ''' background-color: #F9F9F9;}} input[type=submit] {{ color: #FFFFFF; font-weight: bold; background-color: #1D98E4; border-color: #1D98E4}} - textarea {{ width: 80%; height: 120px; }} + textarea {{ font-family: monospace; }} /* Result display */ div.result {{ width: 50%; margin: 40px auto 0px auto; }} div.result h2 {{ background-color: #E0E5E5; border-radius: 3px; @@ -273,6 +275,29 @@ class FormDefinition: "Invalid value for dropdown: {0}".format(value)) return value + def validate_text(self, field_def, value): + minlen = field_def.get('minlen', None) + maxlen = field_def.get('maxlen', None) + + if minlen is not None: + if len(value) < minlen: + raise Exception("minimum length is {0}".format(minlen)) + + if maxlen is not None: + if len(value) > maxlen: + raise Exception("maximum length is {0}".format(maxlen)) + + return value + + def validate_password(self, field_def, value): + minlen = field_def.get('minlen', None) + + if minlen is not None: + if len(value) < minlen: + raise Exception("minimum length is {0}".format(minlen)) + + return value + class ThreadedHTTPServer(ThreadingMixIn, BaseHTTPServer.HTTPServer): pass @@ -427,8 +452,8 @@ class ScriptFormWebApp(WebAppHandler): "float": '', "date": '', "file": '', - "password": '', - "text": '', + "password": '', + "text": '', "select": '', "radio": '{2}
', } @@ -453,7 +478,7 @@ class ScriptFormWebApp(WebAppHandler): elif field['type'] == 'file': input = tpl.format(required, field['name']) elif field['type'] == 'password': - input = tpl.format(required, field['name']) + input = tpl.format(required, field.get('minlen', ''), field['name']) elif field['type'] == 'radio': input = ''.join( [ @@ -462,7 +487,14 @@ class ScriptFormWebApp(WebAppHandler): ] ) elif field['type'] == 'text': - input = tpl.format(required, field['name']) + rows = field.get('rows', 5) + cols = field.get('cols', 80) + input = tpl.format( + required, + field['name'], + rows, + cols + ) elif field['type'] == 'select': options = ''.join([ tpl.format(o[0], o[1]) for o in field['options'] @@ -538,7 +570,9 @@ class ScriptFormWebApp(WebAppHandler): f.write(buf) f.close() field.file.close() + file_fields[field_name] = tmpfile + file_fields['{0}__name'.format(field_name)] = field.filename # Validate the form values form_errors, form_values = form_def.validate(form_values)