Project

General

Profile

Bug #7132

format des dates, conflit API json et workflow_data/form.

Added by Frédéric Péters over 7 years ago. Updated over 7 years ago.

Status:
Fermé
Priority:
Haut
Target version:
-
Start date:
04 May 2015
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:

Description

Dans #6927 on a forcé un retour au get_json_value() sous forme de chaine YYYY-MM-DD; mais la création du dictionnaire json était utilisée aussi pour alimenter le workflow_data lors d'une action de type "Formulaire" :

        if form.get_submit() == 'submit' and not form.has_errors():
            workflow_data = {}
            for k, v in get_json_dict(
                            self.formdef.fields, self.formdef.get_data(form)).items():
                workflow_data['%s_var_%s' % (self.varname, k)] = v

Ça fait que dans le cas d'un champ date, il pouvait y avoir avant un template appelant "[cloture_var_date_preavis.tm_mday]" et maintenant que c'est une chaine, ça ne marche plus.

Pour faire marcher les deux situations, on pourrait avoir dans le get_jsonvalue() retour d'un objet comme celui-ci :

class CompatDate(datetime.date):
    @property
    def tm_mday(self):
        return self.day
    ...

Et puis dans le jsonencoder attraper ça pour sortir YYYY-MM-DD.

Pour éviter de futures confusions, le get_json_dict pourrait aussi être renommé sans json dans son nom (vu qu'on y autorise des types "complexes").


Files


Related issues

Related to w.c.s. - Bug #9876: les champs date des formulaires de workflow deviennent des heures en UTC (la veille à 22 ou 23h à Paris) dans l'export JSONEn cours04 February 2016

Actions

Associated revisions

Revision e65b09fb (diff)
Added by Frédéric Péters over 7 years ago

formdata: add a varnames_only variant to get_dict_with_varnames (#7132)

Revision 46d8878f (diff)
Added by Frédéric Péters over 7 years ago

formdata: keep native ('raw') values in get_dict_with_varnames (#7132)

This is not advertised but may come handy later.

Revision 072aba31 (diff)
Added by Frédéric Péters over 7 years ago

workflows: don't use json output to store workflow form data (#7132)

History

#1

Updated by Frédéric Péters over 7 years ago

Une autre possibilité ce serait d'annuler un petit bout de #2926, mais conséquences plutôt inconnues :

--- a/wcs/wf/form.py
+++ b/wcs/wf/form.py
@@ -22,7 +22,7 @@ from wcs.workflows import WorkflowStatusItem, register_item_class
 from wcs.formdef import FormDef

 from wcs.admin.fields import FieldDefPage, FieldsDirectory
-from wcs.formdata import get_json_dict
+from wcs.formdata import get_dict_with_varnames

 class WorkflowFormFieldsFormDef(FormDef):
@@ -125,7 +125,7 @@ class FormWorkflowStatusItem(WorkflowStatusItem):
     def submit_form(self, form, formdata, user, evo):
         if form.get_submit() == 'submit' and not form.has_errors():
             workflow_data = {}
-            for k, v in get_json_dict(
+            for k, v in get_dict_with_varnames(
                             self.formdef.fields, self.formdef.get_data(form)).items():
                 workflow_data['%s_var_%s' % (self.varname, k)] = v
             formdata.update_workflow_data(workflow_data)

(l'avantage ce serait d'uniformiser l'accès aux variables du formulaire et celles tirées du formulaire du workflow).

En conséquence directe ça veut dire que le [periode_var_date_debut.tm_mday]/[periode_var_date_debut.tm_mon]/[periode_var_date_debut.tm_year] d'un workflow vincennes devrait être modifié en [periode_var_date_debut].

#2

Updated by Thomas Noël over 7 years ago

Je préfère investiguer cette seconde solution. Il faudrait une version "varname only" de get_dict_with_varnames(). Et, selon moi, tout devrait être ok... en profiter évidemment pour rajouter 81281038 tests... :/

#3

Updated by Frédéric Péters over 7 years ago

L'idée du get_dict_with_varnames "varnames only", c'est pour ne pas charger le workflow_data avec une série de valeurs dupliquées (f..., field_..., var_...) ?

Du côté des tests, malheureusement, on peut faire des trucs artificiels qui vont naturellement passer; ou des trucs réels (genre le ..._date.tm_month) qui vont échouer.

Ou on parle de supprimer le get_json_dict pour le remplacer par get_dict_with_varnames(..., varnames_only=True) ? Là je pense que ça va foirer parce que le get_dict_with_varnames va donner des représentations qu'on ne veut pas dans le json (les dates formatées "locale" et non yyyy-mm-dd).

(...)

À tester c'est autre chose qui foire, le test_api.py::test_formdata parce qu'il fait :

>       assert resp.json['fields']['foobar'] == 'foo@localhost'

Et que dans le dictionnaire, c'est évidemment 'var_foobar', pas 'foobar'.

#4

Updated by Thomas Noël over 7 years ago

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

L'idée du get_dict_with_varnames "varnames only", c'est pour ne pas charger le workflow_data avec une série de valeurs dupliquées (f..., field_..., var_...) ?

Oui.

Du côté des tests, malheureusement, on peut faire des trucs artificiels qui vont naturellement passer; ou des trucs réels (genre le ..._date.tm_month) qui vont échouer.

Effectivement...

Ou on parle de supprimer le get_json_dict pour le remplacer par get_dict_with_varnames(..., varnames_only=True) ? Là je pense que ça va foirer parce que le get_dict_with_varnames va donner des représentations qu'on ne veut pas dans le json (les dates formatées "locale" et non yyyy-mm-dd).

Non, je pensais juste (ré)utiliser get_dict_with_varnames au niveau du submit des formulaires de workflows.

#5

Updated by Frédéric Péters over 7 years ago

J'écrivais :

Et que dans le dictionnaire, c'est évidemment 'var_foobar', pas 'foobar'.

À revenir sur le ticket c'est vraiment là-dessus que ma préoccupation se pose; pour moi ça rend impossible la bascule de get_json_dict à get_dict_with_varnames. Je repartirais plutôt sur le hack initial du CompatDate.

#6

Updated by Frédéric Péters over 7 years ago

  • Priority changed from Normal to Haut
#7

Updated by Frédéric Péters over 7 years ago

« Non, pas le hack ! ».

#9

Updated by Thomas Noël over 7 years ago

Forcément je suis content, donc Ack.

#10

Updated by Frédéric Péters over 7 years ago

  • Status changed from En cours to Résolu (à déployer)

Voilà la série poussée.

#11

Updated by Thomas Noël over 7 years ago

  • Status changed from Résolu (à déployer) to Fermé
#12

Updated by Frédéric Péters almost 7 years ago

  • Related to Bug #9852: crash export json sur les dates avant 1900 added
#13

Updated by Frédéric Péters almost 7 years ago

  • Related to deleted (Bug #9852: crash export json sur les dates avant 1900)
#14

Updated by Frédéric Péters almost 7 years ago

  • Related to Bug #9876: les champs date des formulaires de workflow deviennent des heures en UTC (la veille à 22 ou 23h à Paris) dans l'export JSON added

Also available in: Atom PDF