0001-forms-store-empty-non-required-strings-as-empty-stri.patch
tests/test_form_pages.py | ||
---|---|---|
1412 | 1412 |
assert formdef.data_class().count() == 1 |
1413 | 1413 |
data_id = formdef.data_class().select()[0].id |
1414 | 1414 |
data = formdef.data_class().get(data_id) |
1415 |
assert data.data == {'1': None, '0': '1.234;-1.234'}
|
|
1415 |
assert data.data == {'1': '', '0': '1.234;-1.234'}
|
|
1416 | 1416 | |
1417 | 1417 |
def test_form_map_multi_page(pub): |
1418 | 1418 |
formdef = create_formdef() |
tests/test_widgets.py | ||
---|---|---|
69 | 69 | |
70 | 70 |
widget = StringWidget('test', value='foo') |
71 | 71 |
mock_form_submission(req, widget, {'test': ''}) |
72 |
assert widget.parse() is None
|
|
72 |
assert widget.parse() == ''
|
|
73 | 73 | |
74 | 74 |
widget = StringWidget('test', value='foo') |
75 | 75 |
mock_form_submission(req, widget, {'test': 'bar'}) |
... | ... | |
97 | 97 |
form = MockHtmlForm(widget) |
98 | 98 |
mock_form_submission(req, widget, {'test$element0$col0': 'bar', |
99 | 99 |
'test$element1$col1': 'foo'}) |
100 |
assert widget.parse() == [[u'bar', None, None], [None, u'foo', None]]
|
|
100 |
assert widget.parse() == [[u'bar', '', ''], ['', u'foo', '']]
|
|
101 | 101 | |
102 | 102 |
def test_table_list_rows_add_row(): |
103 | 103 |
widget = TableListRowsWidget('test', columns=['a', 'b', 'c']) |
wcs/forms/root.py | ||
---|---|---|
388 | 388 |
k = field.id |
389 | 389 |
v = None |
390 | 390 |
prefilled = False |
391 |
if data.has_key(k): |
|
391 |
if data.has_key(k) and data.get(k) is not None:
|
|
392 | 392 |
v = data[k] |
393 | 393 |
elif field.prefill: |
394 | 394 |
v = field.get_prefill_value() |
wcs/qommon/form.py | ||
---|---|---|
161 | 161 |
value=self.value, **attrs) |
162 | 162 |
StringWidget.render_content = string_render_content |
163 | 163 | |
164 |
def string_parse(self, request): |
|
165 |
# override base class to store empty strings as strings (not None), unless |
|
166 |
# the field if required (as None is used to check if it has been filled) |
|
167 |
value = request.form.get(self.name) |
|
168 |
if isinstance(value, basestring): |
|
169 |
self.value = value |
|
170 |
if self.required and not self.value.strip(): |
|
171 |
self.value = None |
|
172 |
else: |
|
173 |
self.value = None |
|
174 |
StringWidget._parse = string_parse |
|
164 | 175 | |
165 | 176 |
def file_render_content(self): |
166 | 177 |
attrs = {'id': 'form_' + str(self.name).split('$')[0]} |
... | ... | |
725 | 736 | |
726 | 737 |
def _parse(self, request): |
727 | 738 |
StringWidget._parse(self, request) |
728 |
if self.value is not None:
|
|
739 |
if self.value: |
|
729 | 740 |
# basic tests first |
730 | 741 |
if not '@' in self.value[1:-1]: |
731 | 742 |
self.error = _('must be a valid email address') |
... | ... | |
832 | 843 | |
833 | 844 |
def _parse(self, request): |
834 | 845 |
StringWidget._parse(self, request) |
835 |
if self.value is not None:
|
|
846 |
if self.value: |
|
836 | 847 |
for format_string in (self.get_format_string(), |
837 | 848 |
misc.date_format(), '%Y-%m-%d'): |
838 | 849 |
try: |
... | ... | |
1045 | 1056 | |
1046 | 1057 |
def _parse(self, request): |
1047 | 1058 |
StringWidget._parse(self, request) |
1048 |
if self.regex and self.value is not None:
|
|
1059 |
if self.regex and self.value: |
|
1049 | 1060 |
match = re.match(self.regex, self.value) |
1050 | 1061 |
if not match or not match.group() == self.value: |
1051 | 1062 |
self.error = _('wrong format') |
1052 |
- |