Development #66039
/api/users/.../forms/?sort=desc renvoie une liste vide alors que sans "sort=desc" la liste ne l'est pas
0%
Description
Cf. #66028-3
Un même appel avec ou sans sort=desc
ne renvoie pas la même liste.
In [15]: len(requests.get('https://demarches-montoulouse.eservices.toulouse-metropole.fr/api/users/8bb2f80c4198455284d17bd42df95ca9/forms?NameID=8bb2f80c4198455284d17bd42df95ca9&status=all&limit=100', remote_service='auto', without_user=T ...: rue).json()['data']) Out[15]: 4 In [16]: len(requests.get('https://demarches-montoulouse.eservices.toulouse-metropole.fr/api/users/8bb2f80c4198455284d17bd42df95ca9/forms?NameID=8bb2f80c4198455284d17bd42df95ca9&status=all&limit=100&sort=desc', remote_service='auto', with ...: out_user=True).json()['data']) Out[16]: 0
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
- Fichier 0001-api-filter-drafts-using-SQL-to-honor-limit-and-offse.patch 0001-api-filter-drafts-using-SQL-to-honor-limit-and-offse.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a presque 2 ans
A première vue c'est bizarre ce « StrictNotEqual('status', 'draft') » dans le « if include_drafts: » non ?
Aussi, il manque au moins un test, je trouve... (mais peut-être juste un oubli de commit?).
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
- Statut changé de Solution proposée à En cours
Thomas Noël a écrit :
A première vue c'est bizarre ce « StrictNotEqual('status', 'draft') » dans le « if include_drafts: » non ?
C'est pour traduire le filtrage en python fait dans la méthode forms()
de la même classe (il faut voir le code dans le contexte) :
for form in forms: if form.is_draft(): if not include_drafts: continue if form.formdef.is_disabled(): <-- ICI # the form or its draft support has been disabled continue elif not include_non_drafts: continue
donc la condition complète ce serait
if form.is_draft() and include_drafts and form.formdef.is_disabled(): continue
et en SQL ça devient (dans le cas include_drafts) WHERE status is not 'draft' OR formdef_id not IN (...)
.
Aussi, il manque au moins un test, je trouve... (mais peut-être juste un oubli de commit?).
C'est super chiant à tester, je l'ai vu parce que sur une instance de test l'utilisateur courant avait 1000 brouillons et 3 vrais demandes; mais en y réfléchissant je peux jouer dans les tests d'API avec beaucoup moins (je crois que limit est 10 dans les tests), je vais faire ça.
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
- Fichier 0001-api-filter-drafts-using-SQL-to-honor-limit-and-offse.patch 0001-api-filter-drafts-using-SQL-to-honor-limit-and-offse.patch ajouté
- Statut changé de En cours à Solution proposée
Voilà avec un test (qui ne passe plus sans le patch).
Mis à jour par Thomas Noël il y a presque 2 ans
- Statut changé de Solution proposée à Solution validée
Ça marche.
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit f4aadcd4eeb590a6473224036ffa682e483dc6e4 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Wed Jun 8 12:43:45 2022 +0200 api: filter drafts using SQL to honor limit and offset (#66039)
Mis à jour par Transition automatique il y a presque 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
api: filter drafts using SQL to honor limit and offset (#66039)