Projet

Général

Profil

0001-forms-store-empty-non-required-strings-as-empty-stri.patch

Frédéric Péters, 04 novembre 2015 12:48

Télécharger (4,27 ko)

Voir les différences:

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(-)
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
-