general: convert date passed as query filter to expected format (#54428)
This commit is contained in:
parent
7b25253cf9
commit
41edb59393
|
@ -683,6 +683,45 @@ def test_api_list_formdata(pub, local_user):
|
|||
get_app(pub).get(sign_uri('/api/forms/test/list?filter=all&limit=plop', user=local_user), status=400)
|
||||
|
||||
|
||||
def test_api_list_formdata_date_filter(pub, local_user):
|
||||
if not pub.is_using_postgresql():
|
||||
pytest.skip('this requires SQL')
|
||||
|
||||
pub.role_class.wipe()
|
||||
role = pub.role_class(name='test')
|
||||
role.store()
|
||||
|
||||
local_user.roles = [role.id]
|
||||
local_user.store()
|
||||
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'test'
|
||||
formdef.workflow_roles = {'_receiver': role.id}
|
||||
formdef.fields = [
|
||||
fields.DateField(id='0', label='foobar', varname='foobar', type='date'),
|
||||
]
|
||||
formdef.store()
|
||||
|
||||
data_class = formdef.data_class()
|
||||
data_class.wipe()
|
||||
|
||||
for i in range(30):
|
||||
formdata = data_class()
|
||||
formdata.data = {'0': time.strptime('2021-06-%02d' % (i + 1), '%Y-%m-%d')}
|
||||
formdata.user_id = local_user.id
|
||||
formdata.just_created()
|
||||
formdata.jump_status('new')
|
||||
formdata.store()
|
||||
|
||||
resp = get_app(pub).get(sign_uri('/api/forms/test/list?filter-foobar=2021-06-12', user=local_user))
|
||||
assert len(resp.json) == 1
|
||||
|
||||
# alternate date format
|
||||
resp = get_app(pub).get(sign_uri('/api/forms/test/list?filter-foobar=12/06/2021', user=local_user))
|
||||
assert len(resp.json) == 1
|
||||
|
||||
|
||||
def test_api_anonymized_formdata(pub, local_user, admin_user):
|
||||
pub.role_class.wipe()
|
||||
role = pub.role_class(name='test')
|
||||
|
|
|
@ -1982,7 +1982,12 @@ class FormPage(Directory):
|
|||
elif filter_field.type in ('string', 'email') and filter_field_value is not None:
|
||||
criterias.append(Equal('f%s' % filter_field.id, filter_field_value))
|
||||
elif filter_field.type == 'date' and filter_field_value is not None:
|
||||
criterias.append(Equal('f%s' % filter_field.id, filter_field_value))
|
||||
try:
|
||||
filter_field_value = misc.get_as_datetime(filter_field_value).date()
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
criterias.append(Equal('f%s' % filter_field.id, filter_field_value))
|
||||
|
||||
return criterias
|
||||
|
||||
|
|
|
@ -104,7 +104,9 @@ class Criteria(qommon.storage.Criteria):
|
|||
return '%s %s %%(c%s)s' % (self.attribute, self.sql_op, id(self.value))
|
||||
|
||||
def as_sql_param(self):
|
||||
if isinstance(self.value, time.struct_time):
|
||||
if isinstance(self.value, datetime.date):
|
||||
value = self.value.strftime('%Y-%m-%d')
|
||||
elif isinstance(self.value, time.struct_time):
|
||||
value = datetime.datetime.fromtimestamp(time.mktime(self.value))
|
||||
else:
|
||||
value = self.value
|
||||
|
|
Loading…
Reference in New Issue