api: do not load all evolutions if they are not required (#76051)
gitea/wcs/pipeline/head This commit looks good Details

This commit is contained in:
Frédéric Péters 2023-03-30 20:12:25 +02:00
parent 117a727c7e
commit bd2118ed9d
2 changed files with 51 additions and 1 deletions

View File

@ -388,3 +388,52 @@ def test_api_list_formdata_phone_order_by_rank(pub):
)
assert len(resp.json['data']) == 1
assert [int(x['id']) for x in resp.json['data']] == [carddata1.id]
def test_carddata_list_skip_evolutions(pub, sql_queries):
pub.role_class.wipe()
role = pub.role_class(name='test')
role.id = '123'
role.store()
CardDef.wipe()
carddef = CardDef()
carddef.name = 'test'
carddef.workflow_roles = {'_viewer': role.id}
carddef.fields = [
fields.StringField(id='1', label='foobar', varname='foobar'),
]
carddef.store()
carddef.data_class().wipe()
for i in range(10):
carddata = carddef.data_class()()
carddata.data = {'1': 'FOO BAR %s' % i}
carddata.just_created()
carddata.store()
ApiAccess.wipe()
access = ApiAccess()
access.name = 'test'
access.access_identifier = 'test'
access.access_key = '12345'
access.roles = [role]
access.store()
app = get_app(pub)
def get_url(url, **kwargs):
app.set_authorization(('Basic', ('test', '12345')))
return app.get(url, **kwargs)
sql_queries.clear()
get_url('/api/cards/test/list')
assert not [x for x in sql_queries if '%s_evolution' % carddef.table_name in x]
sql_queries.clear()
get_url('/api/cards/test/list?include-workflow=on')
assert [x for x in sql_queries if '%s_evolution' % carddef.table_name in x]
sql_queries.clear()
get_url('/api/cards/test/list?include-evolution=on')
assert [x for x in sql_queries if '%s_evolution' % carddef.table_name in x]
sql_queries.clear()

View File

@ -2493,7 +2493,6 @@ class FormPage(FormdefDirectoryBase):
offset=offset,
limit=limit,
)[0]
self.formdef.data_class().load_all_evolutions(items)
digest_key = 'default'
if self.view and isinstance(self.formdef, CardDef):
view_digest_key = 'custom-view:%s' % self.view.get_url_slug()
@ -2506,6 +2505,8 @@ class FormPage(FormdefDirectoryBase):
include_submission = get_query_flag('include-submission') or full
include_workflow = get_query_flag('include-workflow') or full
include_workflow_data = get_query_flag('include-workflow-data') or full
if include_evolution or include_workflow:
self.formdef.data_class().load_all_evolutions(items)
# noqa pylint: disable=too-many-boolean-expressions
if (
include_fields