Development #54978
API: Dans le schéma d'un champ field.items est renvoyé au lieu de la liste venant d'une datasource
0%
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).
- 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
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×tamp=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]
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.
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.