Projet

Général

Profil

Bug #2926

export json des formdata plus cohérent

Ajouté par Thomas Noël il y a presque 11 ans. Mis à jour il y a plus de 10 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
19 mai 2013
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Planning:

Description

Actuellement l'export JSON des formdata passe par des "get_view_value" et autres machineries, et uniquement pour les fields, donc pas pour workflow_data. Au final on se retrouve par exemple avec des "true" (en bon json), mais aussi des "Yes" ou des "True" (sous forme de string)... Ca va pas.

Je propose que l'objet JSON à exporter ne soit pas modifié autrement que par un JSONEncoder appelé lors du json.dumps. Il traitera uniquement les types de données que le module json ne sait pas gérer nativement. Les valeurs dans les fields ou dans le workflow_data seront ainsi traitées "sur un pied d'égalité".

C'est plus cohérent, notamment pour #2895.


Fichiers

wcs-better-json.patch (4,98 ko) wcs-better-json.patch Thomas Noël, 19 mai 2013 23:23
wcs-better-json-try2.patch (6,9 ko) wcs-better-json-try2.patch Thomas Noël, 21 mai 2013 11:53
wcs-better-json-try3.patch (7,4 ko) wcs-better-json-try3.patch Thomas Noël, 21 mai 2013 13:54

Demandes liées

Duplique w.c.s. - Bug #2895: format des données de wf/form.py dans workflow_dataRejeté16 mai 2013

Actions

Révisions associées

Révision 7a6247ed (diff)
Ajouté par Thomas Noël il y a presque 11 ans

formdata: better JSON export (fix #2926)

Historique

#1

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

Première proposition de patch.

Ce qui manque / reste à faire :
  • la fonction JSONEncoder doit être testée sur l'ensemble des types de champs.
  • on pourra peut-être prévoir un fields.get_json_value(value) à appeler, s'il existe, dans les champs formdata.export_to_json
  • voir ce qui peut être factorisé avec le submit_form de wf/form.py
#2

Mis à jour par Frédéric Péters il y a presque 11 ans

  • Statut changé de Nouveau à En cours
  • Assigné à mis à Thomas Noël

L'idée me convient bien.

+ return time.strftime('%Y-%m-%dT%H:%M:%SZ', obj)

Sans le Z, dans la mesure où on ne connait pas le décalage.

- value = unicode(value, get_publisher().site_charset)

et

- display_value = unicode(display_value, get_publisher().site_charset)

La partie encodage dans le charset du site a été perdue.

#3

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

Une nouvelle version du patch :
  • création d'un get_json_dict(fields,data) qui renvoie un dictionnaire "prévu pour JSON", en appelant field.get_json_value pour les champs où la fonction existe (FileField pour l'instant)
  • utilisation de cette fonction pour produire l'export JSON, mais aussi pour l'enregistrement des donnés de formulaires de workflow dans workflow_data
  • get_dict_with_varnames revu pour prendre en compte field.store_display_value (au lieu de l'ancienne bidouille "value = display_value or raw_value")
  • encodeur JSON appelé avec le charset du site (non testé, mais ça devrait marcher, on y croit)
#4

Mis à jour par Frédéric Péters il y a presque 11 ans

Je viens de mater le code du module json, pour le paramètre encoding ça a l'air bien ce qu'il faut; là-dessus le code est ok, il reste un qommon.strftime.strftime qui a été remplacé par time.strftime, bien que ça n'arrivera pas sur le cas précis du receipt_time, on était passé sur "notre" module strftime à cause de données genre dates de naissance, trop anciennes pour time.strftime. Je me dis que ça ne coûte rien de le laisser ainsi.

#5

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

Effectivement j'ai élagué un peu violemment... Ci-joint un troisième tir. J'ai testé (à la main) avec tous les types de champs (wcs+auquo) et tout passe.

#7

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

Oups... dans ce patch y'a un "len(label_value or '')" que j'ai ajouté suite à un crash de l'affichage d'un champ liste non obligatoire, avec data_source jsonp, et pour laquelle aucune donnée n'avait été soumise, et donc label_value==None)

#8

Mis à jour par Frédéric Péters il y a presque 11 ans

T'en feras un patch séparé (git add -p), hein :) À part ça je dirais que ça me va. Tu as vérifié que le résultat correspondait encore à ce qui se trouve dans la doc (api-get.page) ?

#9

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

Frédéric Péters a écrit :

T'en feras un patch séparé (git add -p), hein :)

Oui chef.

À part ça je dirais que ça me va. Tu as vérifié que le résultat correspondait encore à ce qui se trouve dans la doc (api-get.page) ?

It does.

#10

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

  • Statut changé de En cours à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#11

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

  • Statut changé de Résolu (à déployer) à Rejeté

résolu autrement dans #2926

#12

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

  • Statut changé de Rejeté à Résolu (à déployer)
#13

Mis à jour par Thomas Noël il y a plus de 10 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF