2
Module to rename form fields
6
from formencode.rewritingparser import RewritingParser
8
__all__ = ['rename', 'add_prefix']
10
def rename(form, rename_func):
12
Rename all the form fields in the form (a string), using rename_func
14
rename_func will be called with one argument, the name of the
15
field, and should return a new name.
17
p = RenamingParser(rename_func)
22
def add_prefix(form, prefix, dotted=False):
24
Add the given prefix to all the fields in the form.
26
If dotted is true, then add a dot between prefix and the previous
27
name. Empty fields will use the prefix as the name (with no dot).
29
def rename_func(field_name):
32
return prefix + '.' + field_name
36
return prefix + field_name
37
return rename(form, rename_func)
39
class RenamingParser(RewritingParser):
41
def __init__(self, rename_func):
42
RewritingParser.__init__(self)
43
self.rename_func = rename_func
46
self.handle_misc(None)
47
RewritingParser.close(self)
48
self._text = self._get_text()
53
except AttributeError:
55
"You must .close() a parser instance before getting "
58
def handle_starttag(self, tag, attrs, startend=False):
60
if tag in ('input', 'textarea', 'select'):
61
self.handle_field(tag, attrs, startend)
65
def handle_startendtag(self, tag, attrs):
66
return self.handle_starttag(tag, attrs, True)
68
def handle_field(self, tag, attrs, startend):
69
name = self.get_attr(attrs, 'name', '')
70
new_name = self.rename_func(name)
72
self.del_attr(attrs, 'name')
74
self.set_attr(attrs, 'name', new_name)
75
self.write_tag(tag, attrs)