From f68d4d314b6e50da796139f5902ad125fcdd1370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sat, 13 Jan 2018 22:24:23 +0100 Subject: [PATCH] api: only return formdef count if popularity is requested (#21166) --- help/fr/api-schema.page | 5 +++++ tests/test_api.py | 9 ++++++--- wcs/api.py | 9 ++++++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/help/fr/api-schema.page b/help/fr/api-schema.page index 4bd4a6bc..415cba98 100644 --- a/help/fr/api-schema.page +++ b/help/fr/api-schema.page @@ -75,6 +75,11 @@ saisie backoffice est disponible, sous le même format, via l'URL /api/formdefs/?backoffice-submission=on.

+

+Il est également possible d'obtenir un nombre permettant de trier les résultats +par popularité en ajoutant un paramètre include-popularity=on. Les +différentes entrées disposeront alors d'une clé count. +

diff --git a/tests/test_api.py b/tests/test_api.py index 679297ab..99bc1adb 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -318,7 +318,6 @@ def test_formdef_list(pub): assert resp1.json == resp2.json == resp3.json assert resp1.json[0]['title'] == 'test' assert resp1.json[0]['url'] == 'http://example.net/test/' - assert resp1.json[0]['count'] == 0 assert resp1.json[0]['redirection'] == False assert resp1.json[0]['description'] == 'plop' assert resp1.json[0]['keywords'] == ['mobile', 'test'] @@ -401,7 +400,6 @@ def test_formdef_list_redirection(pub): resp1 = get_app(pub).get('/json') assert resp1.json[0]['title'] == 'test' assert resp1.json[0]['url'] == 'http://example.net/test/' - assert resp1.json[0]['count'] == 0 assert resp1.json[0]['redirection'] == True def test_backoffice_submission_formdef_list(pub, local_user): @@ -917,10 +915,15 @@ def test_categories_formdefs(pub, local_user): assert len(resp.json) == 2 assert resp.json[0]['title'] == 'test' assert resp.json[0]['url'] == 'http://example.net/test/' - assert resp.json[0]['count'] == 0 assert resp.json[0]['redirection'] == False assert resp.json[0]['category'] == 'Category' assert resp.json[0]['category_slug'] == 'category' + assert not 'count' in resp.json[0] + + resp = get_app(pub).get('/api/categories/category/formdefs/?include-popularity=on') + assert resp.json[0]['title'] == 'test' + assert resp.json[0]['url'] == 'http://example.net/test/' + assert resp.json[0]['count'] == 0 get_app(pub).get('/api/categories/XXX/formdefs/', status=404) diff --git a/wcs/api.py b/wcs/api.py index 5356d945..c29c7955 100644 --- a/wcs/api.py +++ b/wcs/api.py @@ -362,6 +362,8 @@ class ApiFormdefsDirectory(Directory): charset = get_publisher().site_charset + include_popularity = get_request().form.get('include-popularity') == 'on' + for formdef in formdefs: authentication_required = False if formdef.roles and not list_all_forms and not backoffice_submission: @@ -398,9 +400,10 @@ class ApiFormdefsDirectory(Directory): formdict['redirection'] = bool(formdef.is_disabled() and formdef.disabled_redirection) - # we include the count of submitted forms so it's possible to sort - # them by popularity - formdict['count'] = formdef.data_class().count() + if include_popularity: + # we include the count of submitted forms so it's possible to sort + # them by popularity + formdict['count'] = formdef.data_class().count() formdict['functions'] = {} formdef_workflow_roles = formdef.workflow_roles or {} -- 2.15.1