Projet

Général

Profil

Development #32013

wcs.api.posted_json_data_to_formdata_data devrait appeler store_display_value et store_structured_value

Ajouté par Benjamin Dauvergne il y a environ 5 ans. Mis à jour il y a environ 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
05 avril 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Si les version _display et _structured d'un ItemField ou d'un ItemsField ne sont pas disponibles dans un submit() il faudrait les récupérer à la source en fonction de l'id.


Fichiers

0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch (3,25 ko) 0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch Benjamin Dauvergne, 05 avril 2019 12:01
0002-api-store-display-structured-on-submit-of-an-item-fi.patch (4,11 ko) 0002-api-store-display-structured-on-submit-of-an-item-fi.patch Benjamin Dauvergne, 05 avril 2019 12:01
0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch (3,26 ko) 0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch Benjamin Dauvergne, 05 avril 2019 12:06
0002-api-store-display-structured-on-submit-of-an-item-fi.patch (4,11 ko) 0002-api-store-display-structured-on-submit-of-an-item-fi.patch Benjamin Dauvergne, 05 avril 2019 12:06
0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch (3,26 ko) 0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch Benjamin Dauvergne, 12 avril 2019 09:57
0002-api-store-display-structured-on-submit-of-an-item-fi.patch (4,31 ko) 0002-api-store-display-structured-on-submit-of-an-item-fi.patch Benjamin Dauvergne, 12 avril 2019 09:57
0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch (3,26 ko) 0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch Benjamin Dauvergne, 12 avril 2019 20:46
0002-api-store-display-structured-on-submit-of-an-item-fi.patch (4,31 ko) 0002-api-store-display-structured-on-submit-of-an-item-fi.patch Benjamin Dauvergne, 12 avril 2019 20:46
0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch (3,26 ko) 0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch Benjamin Dauvergne, 12 avril 2019 23:15
0002-api-store-display-structured-on-submit-of-an-item-fi.patch (4,31 ko) 0002-api-store-display-structured-on-submit-of-an-item-fi.patch Benjamin Dauvergne, 12 avril 2019 23:15
0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch (3,49 ko) 0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch Benjamin Dauvergne, 15 avril 2019 09:00
0002-api-store-display-structured-on-submit-of-an-item-fi.patch (4,31 ko) 0002-api-store-display-structured-on-submit-of-an-item-fi.patch Benjamin Dauvergne, 15 avril 2019 09:00
0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch (3,8 ko) 0001-doc-complete-api-fill.page-about-item-and-items-fiel.patch Benjamin Dauvergne, 15 avril 2019 10:22
0002-api-store-display-structured-on-submit-of-an-item-fi.patch (4,31 ko) 0002-api-store-display-structured-on-submit-of-an-item-fi.patch Benjamin Dauvergne, 15 avril 2019 10:22

Demandes liées

Lié à Passerelle - Development #31595: connecteur générique vers service-public.fr/MDELFermé20 mars 2019

Actions

Révisions associées

Révision 04e06d4e (diff)
Ajouté par Benjamin Dauvergne il y a environ 5 ans

doc: complete api-fill.page about item and items field (#32013)

Révision 048024af (diff)
Ajouté par Benjamin Dauvergne il y a environ 5 ans

api: store display/structured on submit of an item field with raw id (#32013)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

C'est dans le cadre du connecteur MDEL dans passerelle qui va créer des formulaires dans w.c.s. dont un champ ItemField est lié à une source de donnée passerelle (villes raccordées avec id étant le code INSEE, text le nom de la commune).

#2

Mis à jour par Frédéric Péters il y a environ 5 ans

Ça me semble raisonnable. (je vois en passant qu'on ne documente pas les champs liste dans help/fr/api-fill.page).

#3

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

  • Assigné à mis à Benjamin Dauvergne
#4

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

Reste à voir si ça ne casse rien d'autre.

#6

Mis à jour par Frédéric Péters il y a environ 5 ans

Je n'autoriserais pas l'absence de l'un ou l'autre (_display ou _structured), je les récupérerais uniquement quand aucun des deux n'est défini.

#7

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

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

Je n'autoriserais pas l'absence de l'un ou l'autre (_display ou _structured), je les récupérerais uniquement quand aucun des deux n'est défini.

Ce qu'on accepte actuellement:

  • varname -> ok
  • varname_raw -> erreur
  • varname_raw + varname_display -> ok
  • varname + varname_structured -> ok (parce que "store_display_value and raw in data)
  • varname_raw + varname_display + varname_structured -> ok

Tu me demande d'interdire varname + varname_structured ?

Déjà simplement en ne remplissant les champs quand ils sont tous les deux absents j'en suis là :

--- a/wcs/api.py
+++ b/wcs/api.py
@@ -60,14 +60,20 @@ def posted_json_data_to_formdata_data(formdef, data):
         if field.store_structured_value and structured in data:
             data['%s_structured' % field.id] = data.pop(structured)

-    # parse special fields
+    # complete/adapt field values
     for field in formdef.get_all_fields():
-        if not hasattr(field, 'from_json_value'):
-            continue
+        structured = '%s_structured' % field.id
+        display = '%s_display' % field.id
         if data.get(field.id) is None:
             continue
-        data[field.id] = field.from_json_value(data[field.id])
-
+        if field.store_display_value and display not in data:
+            data[display] = field.store_display_value(data, field.id)
+        if field.store_structured_value and structured not in data:
+            structured_value = field.store_structured_value(data, field.id)
+            if structured_value:
+                data[structured] = structured_value
+        if hasattr(field, 'from_json_value'):
+            data[field.id] = field.from_json_value(data[field.id])
     return data

#9

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

#10

Mis à jour par Nicolas Roche il y a environ 5 ans

  • Statut changé de Solution proposée à En cours

J'ai pas encore fini (désolé j'ai du mal)...
Mais j'ai l'impression qu'il y a une typo ici :

display_value = field.store_display_value(data, field.id)
if display is not None:
   data[display] = display_value

J'aurais mis (comme c'est fait pour structured_value en dessous) :
if display_value is not None:

#11

Mis à jour par Nicolas Roche il y a environ 5 ans

  • Statut changé de En cours à Solution validée

Je n'ai encore qu'une vision qui reste très focalisé sur le code modifié seulement,
mais je le valide (moyennant la petite correction pointée précédemment).

#13

Mis à jour par Frédéric Péters il y a environ 5 ans

s/La valeur peut-être/La valeur peut être/

Cette relecture n'est pas exhaustive.

#15

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

Voilà pour la doc.

#16

Mis à jour par Nicolas Roche il y a environ 5 ans

  • Statut changé de Solution proposée à En cours

Arf, j'ai effectivement passé sur la doc un peu trop vite.

(elle y était 2 fois, et elle y est encore pour les listes à choix multiples)

La valeur peut-être 
La valeur peut être 

une liste d'identifiant
une liste d'identifiants
Personnellement j'aurais préféré que tu divises l'exemple en deux :
  • pour les listes simples
  • pour les sources de données
    (c'est pas grand chose mais ça simplifie un peu).
Peut être aussi séparer les 2 cas pour les données structurées :
  • format 1 :
    "X": "1",
    "X_display": "Valeur1",
    "X_structured: ... // obligatoire
    
  • format 2 :
    "Y_raw": "1",
    "Y": "Valeur1",
    "Y_structured: ... // facultatif
    

    (en fait je suis toujours par sûr d'avoir bien compris).

Et enfin, dans les explications tu ne mentionnes pas '_display' alors que ça apparaît dans les exemples.

#17

Mis à jour par Nicolas Roche il y a environ 5 ans

  • Statut changé de En cours à Solution validée

Vu que cette fois je pense avoir fais le tour, je préfère en fait valider pour ne pas te bloquer.
Stp, essayes-juste de clarifier un peu plus la doc.

#18

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

J'ai supprimé les exemples et la description correspondant à l'utilisation des
identifiants numériques des champs puisqu'il est acquis qu'on ne souhaite pas
que les l'utilisent, l'utilisation des varname est obligatoire.

J'ai rapproché les exemples de leur description en les intégrant dans le
contenu de la liste de termes.

J'ai utilisé le noeud <var></var> autour des occurences de varname dans la
description et dans les exemples.

#19

Mis à jour par Frédéric Péters il y a environ 5 ans

le label de la donnée (2x)

Plutôt libellé.

            "text": "Valeur1",
            "foo": "bar",
         },

La virgule derrière "foo": "bar" n'est pas tolérée.

(moins important mais jusqu'à présent les lignes de documentation étaient wrappées à ~80 caractères).

#20

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

Remarques intégrés.

J'ai par ailleurs fait deux autres changements pour mieux coller aux descriptions :
  • "ValeurX" remplacé par "Libellé X"
  • séparation des exemples pour les sources de donnée en deux pour bien séparer le cas simple :
varname: 1

du cas étendu :

varname_raw: 1
varname: "Libellé"
#21

Mis à jour par Nicolas Roche il y a environ 5 ans

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

Merci, c'est plus clair pour moi.
(Ack)

#22

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 048024af935715331beceae8a28f1e50f5356260
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Fri Apr 5 12:00:05 2019 +0200

    api: store display/structured on submit of an item field with raw id (#32013)

commit 04e06d4e028b73d842947455cc23c74a6ebb8476
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Fri Apr 5 11:08:18 2019 +0200

    doc: complete api-fill.page about item and items field (#32013)
#23

Mis à jour par Frédéric Péters il y a environ 5 ans

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

Formats disponibles : Atom PDF