api: add filter-internal-id filter in /list endpoints (#59827)
This commit is contained in:
parent
3977675ee0
commit
3a1420eb29
|
@ -793,6 +793,40 @@ def test_api_list_formdata_date_filter(pub, local_user):
|
|||
assert len(resp.json) == 1
|
||||
|
||||
|
||||
def test_api_list_formdata_internal_id_filter(pub, local_user):
|
||||
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 = []
|
||||
formdef.store()
|
||||
|
||||
data_class = formdef.data_class()
|
||||
data_class.wipe()
|
||||
|
||||
for i in range(2):
|
||||
formdata = data_class()
|
||||
formdata.data = {}
|
||||
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-internal-id=1', user=local_user))
|
||||
assert len(resp.json) == 1
|
||||
resp = get_app(pub).get(sign_uri('/api/forms/test/list?filter-internal-id=2', user=local_user))
|
||||
assert len(resp.json) == 1
|
||||
resp = get_app(pub).get(sign_uri('/api/forms/test/list?filter-internal-id=42', user=local_user))
|
||||
assert len(resp.json) == 0
|
||||
|
||||
|
||||
def test_api_list_formdata_block_field_filter(pub, local_user):
|
||||
if not pub.is_using_postgresql():
|
||||
pytest.skip('this requires SQL')
|
||||
|
|
|
@ -1002,7 +1002,17 @@ class FormPage(Directory):
|
|||
)
|
||||
|
||||
def get_filterable_field_types(self):
|
||||
types = ['string', 'email', 'item', 'bool', 'items', 'period-date', 'user-id', 'submission-agent-id']
|
||||
types = [
|
||||
'string',
|
||||
'email',
|
||||
'item',
|
||||
'bool',
|
||||
'items',
|
||||
'internal-id',
|
||||
'period-date',
|
||||
'user-id',
|
||||
'submission-agent-id',
|
||||
]
|
||||
if get_publisher().is_using_postgresql():
|
||||
types.append('date')
|
||||
return types
|
||||
|
@ -1619,6 +1629,7 @@ class FormPage(Directory):
|
|||
from wcs import sql
|
||||
|
||||
fake_fields = [
|
||||
FakeField('internal-id', 'internal-id', _('Identifier')),
|
||||
FakeField('start', 'period-date', _('Start')),
|
||||
FakeField('end', 'period-date', _('End')),
|
||||
FakeField('start-mtime', 'period-date', _('Start (modification time)')),
|
||||
|
@ -1663,6 +1674,10 @@ class FormPage(Directory):
|
|||
if filters_dict.get('filter-%s' % filter_field.contextual_varname):
|
||||
filter_field_key = 'filter-%s' % filter_field.contextual_varname
|
||||
|
||||
if filter_field.type == 'internal-id' and filters_dict.get('filter-internal-id'):
|
||||
# varname is 'internal_id' and not 'internal-id', fill filter-internal-id-value
|
||||
filters_dict['filter-internal-id-value'] = filters_dict['filter-internal-id']
|
||||
|
||||
if filter_field.type == 'user-id':
|
||||
# convert uuid based filter into local id filter
|
||||
name_id = filters_dict.get('filter-user-uuid')
|
||||
|
@ -1738,6 +1753,8 @@ class FormPage(Directory):
|
|||
parent_field=filter_field.block_field,
|
||||
)
|
||||
)
|
||||
elif filter_field.type == 'internal-id':
|
||||
criterias.append(Equal('id', str(filter_field_value)))
|
||||
elif filter_field.type == 'period-date':
|
||||
try:
|
||||
filter_date_value = misc.get_as_datetime(filter_field_value).timetuple()
|
||||
|
|
Loading…
Reference in New Issue