misc: check converting any value is possible before trying it in filter (#51117)
gitea-wip/wcs/pipeline/head Build started... Details
gitea/wcs/pipeline/head Build started... Details

This commit is contained in:
Frédéric Péters 2021-02-15 12:28:43 +01:00
parent 2f012a4ae7
commit 7114f4ab8f
2 changed files with 16 additions and 7 deletions

View File

@ -610,6 +610,7 @@ def variable_test_data(pub):
fields.StringField(id='11', label='number2', varname='term2'),
fields.StringField(id='12', label='float1', varname='value'),
fields.PasswordField(id='13', label='pwd', varname='pwd'),
fields.EmailField(id='14', label='email', varname='email'),
]
formdef.workflow_roles = {'_receiver': role.id}
formdef.geolocations = {'base': 'Base'}
@ -638,6 +639,7 @@ def variable_test_data(pub):
'md5': '0cc175b9c0f1b6a831c399e269772661',
'sha1': '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8',
},
'14': 'test@localhost',
}
formdata.data['5'].receive([b'hello world'])
formdata.geolocations = {'base': {'lat': 1, 'lon': 2}}
@ -1170,6 +1172,11 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
queryset = lazy_formdata.objects.filter_by('term1').apply_filter_value('foobar')
assert queryset.count == 0
queryset = lazy_formdata.objects.filter_by('email').apply_filter_value('bar')
assert queryset.count == 0
queryset = lazy_formdata.objects.filter_by('email').apply_filter_value('test@localhost')
assert queryset.count == 1
# filter function on backoffice field
queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('plop1')
assert queryset.count == 6

View File

@ -185,13 +185,15 @@ class LazyFormDefObjectsManager(object):
)
return self.none()
try:
value = field.convert_value_from_anything(value)
except (ValueError, AttributeError):
get_publisher().record_error(
_('Invalid value "%s" for filter "%s"') % (value, self.pending_attr), formdata=self._formdata
)
return self.none()
if field.convert_value_from_anything:
try:
value = field.convert_value_from_anything(value)
except (ValueError, AttributeError):
get_publisher().record_error(
_('Invalid value "%s" for filter "%s"') % (value, self.pending_attr),
formdata=self._formdata,
)
return self.none()
from wcs import sql