Projet

Général

Profil

Development #51207

refacto, field.set_value()

Ajouté par Frédéric Péters il y a environ 3 ans. Mis à jour il y a environ 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
17 février 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

On a plusieurs endroits qui modifient la valeur d'un champ, et c'est chaque fois genre 15 lignes qui sont copiées/collées/modifiées,

            formdata.data['%s' % field['field_id']] = new_value
            if formdef_field.store_display_value:
                display_value = formdef_field.store_display_value(formdata.data, formdef_field.id)
                if display_value:
                    formdata.data['%s_display' % formdef_field.id] = display_value
                elif '%s_display' % formdef_field.id in formdata.data:
                    del formdata.data['%s_display' % formdef_field.id]
            if formdef_field.store_structured_value and formdata.data.get(formdef_field.id):
                structured_value = formdef_field.store_structured_value(formdata.data, formdef_field.id)
                if structured_value:
                    if isinstance(structured_value, dict) and structured_value.get('id'):
                        # in case of list field, override id
                        formdata.data['%s' % formdef_field.id] = str(structured_value.get('id'))
                    formdata.data['%s_structured' % formdef_field.id] = structured_value
                elif '%s_structured' % formdef_field.id in formdata.data:
                    del formdata.data['%s_structured' % formdef_field.id]

Fichiers

Révisions associées

Révision 3afa8440 (diff)
Ajouté par Frédéric Péters il y a environ 3 ans

general: factor field value assignment into a set_value method (#51207)

Historique

#1

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

Proposition de factoriser ça au niveau du champ.

Il y a aussi idée derrière de repasser sur les convert_value_from_{anything,str} et clarifier tout ça mais cette première étape est toute propre. (et peut corriger des bugs, genre l'anonymisation qui ne vidait pas la partie _structured).

#2

Mis à jour par Thomas Noël il y a environ 3 ans

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

Dans wcs/backoffice/data_management.py, sur le import_csv_submit tu peux même supprimer la ligne « field_id = str(field.id) » qui ne sert plus.

Dans le même fichier selon moi tu n'étais pas obligé de toucher à UserField (suppression de store_display_value / store_structured_value et redéfinition d'un set_value à la place). Mais comme set_value ne va surement pas changer de sens, je comprends l'idée et je acke ainsi.

#3

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

tu n'étais pas obligé de toucher à UserField

Si,

[2021-02-17 09:29:32] exception caught
Exception:
  type = '<class 'AttributeError'>', value = ''UserField' object has no attribute 'set_value''

Stack trace (most recent call first):
  File "/home/fred/src/eo/wcs/wcs/backoffice/data_management.py", line 275, in import_csv_submit
   273                 if field.convert_value_from_str is None:
   274                     continue
>  275                 field_id = str(field.id)
   276                 field.set_value(data_line, field.convert_value_from_str(value))
   277             data_lines.append(data_line)

(et du coup en étant là j'ai supprimé les store_etc. inutiles).

#4

Mis à jour par Thomas Noël il y a environ 3 ans

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

tu n'étais pas obligé de toucher à UserField

Si,

Bête que je suis, évidemment.

#5

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 3afa84408626e6125544c08b4e4ee28ba673bc68
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Wed Feb 17 08:53:23 2021 +0100

    general: factor field value assignment into a set_value method (#51207)
#6

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

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

Formats disponibles : Atom PDF