Projet

Général

Profil

Development #54978

API: Dans le schéma d'un champ field.items est renvoyé au lieu de la liste venant d'une datasource

Ajouté par Benjamin Dauvergne il y a presque 3 ans. Mis à jour il y a 9 mois.

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

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Cf. #54822

On a ici un champ source de donnée depuis une liste d'évènements chrono, sur un accès non signé1 on reçoit tout de même une liste d'items, sans items structuré, certainement un reste d'une précédente configuration du champ :

    {
      "anonymise": false,
      "data_source": {
        "type": "journees_a_la_mer" 
      },
      "display_disabled_items": false,
      "display_mode": "list",
      "extra_css_class": "grid-1-2",
      "hint": "choisissez",
      "in_filters": true,
      "initial_zoom": "13",
      "items": [
        "Cabourg, le 24 juillet",
        "Cabourg, le 14 août",
        "Deauville, le 14 août" 
      ],
      "label": "Choix de la destination",
      "prefill": {
        "type": "none" 
      },
      "required": true,
      "type": "item",
      "varname": "event" 
    },

Ici on ne devrait pas avoir items, ensuite même signé il semble qu'on reçoive quand même field.items2 et là je ne sais pas pourquoi (le ticket client est un souci dans wcs-olap qui normalement signe tous ses appels).

À mon sens il y a donc deux problèmes :
  • si une datasource est utilisé et le schéma est anonymisé, on ne doit pas avoir de champs items dans le schéma
  • si le schéma n'est pas anonymisé on devrait avoir structured_items et items avec les bonnes valeurs (ici on en a que 3)

1 https://demarches-moncompte.nanterre.fr/api/formdefs/journees-a-la-mer/schema
fn2.

class ItemField...
...
    def export_to_json(self, include_id=False, anonymise=True):
        field = super().export_to_json(include_id=include_id, anonymise=anonymise)
        if self.data_source and not anonymise:
            structured_items = data_sources.get_structured_items(self.data_source)
            if structured_items:
                field['structured_items'] = structured_items
                if not field.get('items'):
                    field['items'] = [item['text'] for item in structured_items]
        return field

class ApiFormdefDirectory(Directory):
    _q_exports = ['schema', 'submit']

    def __init__(self, formdef):
        self.formdef = formdef

    def schema(self):
        get_response().set_content_type('application/json')
        return self.formdef.export_to_json(anonymise=not is_url_signed()) <-- ICI pas anonymisé si signé

Historique

#2

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

  • Description mis à jour (diff)
#3

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

J'ai la preuve que wcs-olap signe bien ses appels :

192.168.139.21 - - [18/Jun/2021:11:32:53 +0200] "GET /api/formdefs/journees-a-la-mer/schema?orig=statistiques-moncompte.nanterre.fr&algo=sha256&timestamp=2021-06-18T09%3A32%3A53Z&nonce=e8684f5c3580076412862d37f70f40a6&signature=EUxU3J2GfOse7JlSchLZ8TPxl3nbpG2ra89FP7wXT/M%3D HTTP/1.1" 200 29070 "-" "python-requests/2.21.0" "demarches-moncompte.nanterre.fr" [0.120 s]

#4

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

Je viens de corriger le field à la main en mettant fields.items = [], au passage j'ai pu vérifier qu'un appel dans le shell à field.export_to_json(anonymise=False) renvoie bien items et structured_items :

>>> formdef.fields[2].export_to_json(anonymise=False).keys()
dict_keys(['label', 'type', 'required', 'hint', 'varname', 'extra_css_class', 'prefill', 'items', 'display_mode', 'data_source', 'in_filters', 'anonymise', 'display_disabled_items', 'initial_zoom', 'structured_items'])
>>> formdef
<FormDef 'Journées à la mer 2021' id:90>

donc le problème est en amont de l'appel.

#6

Mis à jour par Frédéric Péters il y a 9 mois

  • Statut changé de Nouveau à Fermé

Il y a eu #68708 qui notamment supprimer "items" quand une source de données est configurée.

Formats disponibles : Atom PDF