From d307baadecae557dd85b979bf22689585d2da4bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 4 Nov 2015 12:47:28 +0100 Subject: [PATCH] forms: store empty non required strings as empty strings (#8862) --- tests/test_form_pages.py | 2 +- tests/test_widgets.py | 4 ++-- wcs/forms/root.py | 2 +- wcs/qommon/form.py | 17 ++++++++++++++--- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 01b6a95..a69d48e 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -1412,7 +1412,7 @@ def test_form_map_field_back_and_submit(pub): assert formdef.data_class().count() == 1 data_id = formdef.data_class().select()[0].id data = formdef.data_class().get(data_id) - assert data.data == {'1': None, '0': '1.234;-1.234'} + assert data.data == {'1': '', '0': '1.234;-1.234'} def test_form_map_multi_page(pub): formdef = create_formdef() diff --git a/tests/test_widgets.py b/tests/test_widgets.py index a8daf62..f10caec 100644 --- a/tests/test_widgets.py +++ b/tests/test_widgets.py @@ -69,7 +69,7 @@ def test_stringwidget_values(): widget = StringWidget('test', value='foo') mock_form_submission(req, widget, {'test': ''}) - assert widget.parse() is None + assert widget.parse() == '' widget = StringWidget('test', value='foo') mock_form_submission(req, widget, {'test': 'bar'}) @@ -97,7 +97,7 @@ def test_table_list_rows(): form = MockHtmlForm(widget) mock_form_submission(req, widget, {'test$element0$col0': 'bar', 'test$element1$col1': 'foo'}) - assert widget.parse() == [[u'bar', None, None], [None, u'foo', None]] + assert widget.parse() == [[u'bar', '', ''], ['', u'foo', '']] def test_table_list_rows_add_row(): widget = TableListRowsWidget('test', columns=['a', 'b', 'c']) diff --git a/wcs/forms/root.py b/wcs/forms/root.py index dc1b4c0..8c610e6 100644 --- a/wcs/forms/root.py +++ b/wcs/forms/root.py @@ -388,7 +388,7 @@ class FormPage(Directory): k = field.id v = None prefilled = False - if data.has_key(k): + if data.has_key(k) and data.get(k) is not None: v = data[k] elif field.prefill: v = field.get_prefill_value() diff --git a/wcs/qommon/form.py b/wcs/qommon/form.py index db493d4..1bf867a 100644 --- a/wcs/qommon/form.py +++ b/wcs/qommon/form.py @@ -161,6 +161,17 @@ def string_render_content(self): value=self.value, **attrs) StringWidget.render_content = string_render_content +def string_parse(self, request): + # override base class to store empty strings as strings (not None), unless + # the field if required (as None is used to check if it has been filled) + value = request.form.get(self.name) + if isinstance(value, basestring): + self.value = value + if self.required and not self.value.strip(): + self.value = None + else: + self.value = None +StringWidget._parse = string_parse def file_render_content(self): attrs = {'id': 'form_' + str(self.name).split('$')[0]} @@ -725,7 +736,7 @@ class EmailWidget(StringWidget): def _parse(self, request): StringWidget._parse(self, request) - if self.value is not None: + if self.value: # basic tests first if not '@' in self.value[1:-1]: self.error = _('must be a valid email address') @@ -832,7 +843,7 @@ class DateWidget(StringWidget): def _parse(self, request): StringWidget._parse(self, request) - if self.value is not None: + if self.value: for format_string in (self.get_format_string(), misc.date_format(), '%Y-%m-%d'): try: @@ -1045,7 +1056,7 @@ class ValidatedStringWidget(StringWidget): def _parse(self, request): StringWidget._parse(self, request) - if self.regex and self.value is not None: + if self.regex and self.value: match = re.match(self.regex, self.value) if not match or not match.group() == self.value: self.error = _('wrong format') -- 2.6.2