Projet

Général

Profil

0001-misc-filter_value-and-integers-50422.patch

Lauréline Guérin, 22 janvier 2021 15:37

Télécharger (4,92 ko)

Voir les différences:

Subject: [PATCH] misc: |filter_value and integers (#50422)

 tests/test_formdata.py | 29 +++++++++++++++++++++++++----
 wcs/variables.py       | 10 ++--------
 2 files changed, 27 insertions(+), 12 deletions(-)
tests/test_formdata.py
1062 1062
    data_class = lazy_formdata._formdef.data_class()
1063 1063
    for i in range(6):
1064 1064
        formdata = data_class()
1065
        formdata.data = {'0': 'bar', 'bo1': 'plop1'}
1065
        formdata.data = {'0': 'bar', '1': True, 'bo1': 'plop1', '10': '3'}
1066 1066
        formdata.just_created()
1067 1067
        formdata.store()
1068 1068
    for i in range(4):
1069 1069
        formdata = data_class()
1070
        formdata.data = {'0': 'foo', '3': datetime.date(2018, 7, 31).timetuple(), 'bo1': 'plop2'}
1070
        formdata.data = {'0': 'foo', '1': False, '3': datetime.date(2018, 7, 31).timetuple(), 'bo1': 'plop2', '10': '4'}
1071 1071
        formdata.just_created()
1072 1072
        formdata.jump_status('finished')
1073 1073
        formdata.store()
......
1113 1113
        logged_error = pub.loggederror_class.select()[1]
1114 1114
        assert logged_error.summary == 'Invalid value "not a date" for filter "datefield"'
1115 1115

  
1116
    queryset = lazy_formdata.objects.filter_by('boolfield').apply_filter_value(True)
1117
    assert queryset.count == 6
1118
    queryset = lazy_formdata.objects.filter_by('boolfield').apply_filter_value(1)
1119
    assert queryset.count == 6
1120
    queryset = lazy_formdata.objects.filter_by('boolfield').apply_filter_value('yes')
1121
    assert queryset.count == 6
1122
    queryset = lazy_formdata.objects.filter_by('boolfield').apply_filter_value(False)
1123
    assert queryset.count == 5
1124
    queryset = lazy_formdata.objects.filter_by('boolfield').apply_filter_value(0)
1125
    assert queryset.count == 5
1126

  
1127
    queryset = lazy_formdata.objects.filter_by('term1').apply_filter_value('3')
1128
    assert queryset.count == 7
1129
    queryset = lazy_formdata.objects.filter_by('term1').apply_filter_value(3)
1130
    assert queryset.count == 7
1131
    queryset = lazy_formdata.objects.filter_by('term1').apply_filter_value('foobar')
1132
    assert queryset.count == 0
1133

  
1116 1134
    # filter function on backoffice field
1117 1135
    queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('plop1')
1118 1136
    assert queryset.count == 6
......
1167 1185
    pub.substitutions.feed(formdata)
1168 1186
    tmpl = Template('{{form_objects|filter_by:"foo_foo"|filter_value:form_var_foo_foo|count}}')
1169 1187
    assert tmpl.render(context) == '7'
1170

  
1171
    tmpl = Template('{{form.objects|filter_by:"foo_foo"|filter_value:form_var_foo_foo|count}}')
1188
    tmpl = Template('{{form_objects|filter_by:"datefield"|filter_value:form_var_datefield|count}}')
1189
    assert tmpl.render(context) == '5'
1190
    tmpl = Template('{{form_objects|filter_by:"boolfield"|filter_value:form_var_boolfield|count}}')
1191
    assert tmpl.render(context) == '5'
1192
    tmpl = Template('{{form_objects|filter_by:"term1"|filter_value:form_var_term1|count}}')
1172 1193
    assert tmpl.render(context) == '7'
1173 1194

  
1174 1195
    tmpl = Template('{{form.objects|exclude_self|filter_by:"foo_foo"|filter_value:form_var_foo_foo|count}}')
wcs/variables.py
16 16

  
17 17
import warnings
18 18

  
19
from django.utils import six
20 19
from django.utils.encoding import force_text
21 20
from django.utils.functional import SimpleLazyObject
22 21

  
......
26 25

  
27 26
from .qommon import misc, force_str, _
28 27
from .qommon.evalutils import make_datetime
29
from .qommon.templatetags.qommon import parse_date, parse_datetime
28
from .qommon.templatetags.qommon import parse_datetime
30 29
from .qommon.storage import (Or, Equal, NotEqual, Null)
31 30
from .qommon.substitution import CompatibilityNamesDict
32 31

  
......
164 163
    def apply_filter_value(self, value):
165 164
        assert self.pending_attr
166 165

  
167
        def format_value(field, value):
168
            if field.key != 'date':
169
                return value
170
            return parse_date(value).timetuple()
171

  
172 166
        for field in self._formdef.get_all_fields():
173 167
            if getattr(field, 'varname', None) == self.pending_attr:
174 168
                try:
175
                    value = format_value(field, value)
169
                    value = field.convert_value_from_anything(value)
176 170
                except (ValueError, AttributeError):
177 171
                    get_publisher().record_error(_('Invalid value "%s" for filter "%s"') % (value, self.pending_attr), formdata=self._formdata)
178 172
                    return self.none()
179
-