Projet

Général

Profil

Development #66039

/api/users/.../forms/?sort=desc renvoie une liste vide alors que sans "sort=desc" la liste ne l'est pas

Ajouté par Benjamin Dauvergne il y a presque 2 ans. Mis à jour il y a presque 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
08 juin 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Révision f4aadcd4 (diff)
Ajouté par Benjamin Dauvergne il y a presque 2 ans

api: filter drafts using SQL to honor limit and offset (#66039)

Historique

#3

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

  • Assigné à mis à Benjamin Dauvergne
#4

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

#5

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?).

#6

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.

#7

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

Voilà avec un test (qui ne passe plus sans le patch).

#8

Mis à jour par Thomas Noël il y a presque 2 ans

  • Statut changé de Solution proposée à Solution validée

Ça marche.

#9

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)
#10

Mis à jour par Transition automatique il y a presque 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#11

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF