Projet

Général

Profil

0001-Revert-forms-store-empty-non-required-strings-as-emp.patch

Frédéric Péters, 05 novembre 2015 13:12

Télécharger (4,34 ko)

Voir les différences:

Subject: [PATCH 1/4] Revert "forms: store empty non required strings as empty
 strings (#8862)"

This reverts commit fe7f2a1ee28d7dcdfe5700de2cdc584d227a8bd6.
 tests/test_form_pages.py |  2 +-
 tests/test_widgets.py    |  4 ++--
 wcs/forms/root.py        |  2 +-
 wcs/qommon/form.py       | 17 +++--------------
 4 files changed, 7 insertions(+), 18 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': '', '0': '1.234;-1.234'}
1415
    assert data.data == {'1': None, '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() == ''
72
    assert widget.parse() is None
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', '', ''], ['', u'foo', '']]
100
    assert widget.parse() == [[u'bar', None, None], [None, u'foo', None]]
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) and data.get(k) is not None:
391
                if data.has_key(k):
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
175 164

  
176 165
def file_render_content(self):
177 166
    attrs = {'id': 'form_' + str(self.name).split('$')[0]}
......
736 725

  
737 726
    def _parse(self, request):
738 727
        StringWidget._parse(self, request)
739
        if self.value:
728
        if self.value is not None:
740 729
            # basic tests first
741 730
            if not '@' in self.value[1:-1]:
742 731
                self.error = _('must be a valid email address')
......
843 832

  
844 833
    def _parse(self, request):
845 834
        StringWidget._parse(self, request)
846
        if self.value:
835
        if self.value is not None:
847 836
            for format_string in (self.get_format_string(),
848 837
                    misc.date_format(), '%Y-%m-%d'):
849 838
                try:
......
1056 1045

  
1057 1046
    def _parse(self, request):
1058 1047
        StringWidget._parse(self, request)
1059
        if self.regex and self.value:
1048
        if self.regex and self.value is not None:
1060 1049
            match = re.match(self.regex, self.value)
1061 1050
            if not match or not match.group() == self.value:
1062 1051
                self.error = _('wrong format')
1063
-