Projet

Général

Profil

Development #62943

plone_restapi: zapper les dictionnaires dont les valeurs de toutes les clés sont vides

Ajouté par Nicolas Roche il y a environ 2 ans. Mis à jour il y a environ 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
18 mars 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Pour renseigner l'annuaire, on doit passer les champs 'mails', 'phones' et 'urls' sous forme de liste de dictionnaires.
Plone n'accepte pas les listes ayant un dictionnaire avec des éléments vides.
Pour palier à cela, dans wcs on envoie un dictionnaire dont les valeurs de toutes les clés sont vides.
Dans le connecteur, il faut retirer ces dictionnaires des listes envoyées à Plone.
ex:

'phones': [
  {'label': 'numéro principal', 'number': '0123456789', 'type': 'work'},
  {'label': '', 'number': '', 'type': ''}],  # retirer cette ligne
]


Fichiers


Demandes liées

Lié à Passerelle - Bug #64760: plone : crash sur rejeux d'une demande existanteFermé02 mai 2022

Actions

Révisions associées

Révision 3588169e (diff)
Ajouté par Nicolas Roche il y a environ 2 ans

plone_restapi: split adapt_payload function (#62943)

Révision 9daa087c (diff)
Ajouté par Nicolas Roche il y a environ 2 ans

plone_restapi: adapt list content sent to Plone (#62943)

Historique

#3

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

Est-ce que ça n'est pas inutilement compliqué pour gérer des cas qui n'existent pas ?

Tu pourrais juste reprendre le cas réel, {'label': '', 'number': '', 'type': ''}, assurer qu'il fonctionne, ne pas faire ce test_remove_unvaluated_dict_from_list qui amène ou découle de la remove_unvaluated_dict_from_list assez peu lisible.

#5

Mis à jour par Emmanuel Cazenave il y a environ 2 ans

Tu introduis une méthode convert_image_format qui est appelée une seule fois donc autant ne pas introduire de nouvelle méthode.

La remarque de Fred est que remove_unvaluated_dict_from_list est assez peu lisible et je suis d'accord et ça reste assez peu lisible dans ce nouveau patch.

Un truc plus simple du genre ci-dessous devrait marcher :

def remove_unvaluated_dict_from_list(self, payload):
    for field_key, field_value in payload.items():
        if isinstance(field_value, list):
            data_list = []
            for dict_value in field_value:
                for value in dict_value.values():
                    if value != '':
                        data_list.append(dict_value)
                        break
            if data_list:
                data[field_key] = data_list
        else:
            data[field_key] = field_value

    return data
#6

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

J'ai tapé dans la branche la suggestion, modulo

-                    if value != '':
+                    if value or value is False:

pour qu'on ne se trouve pas avec la clé face à une valeur nulle mais qu'on continue quand même à inclure false pour les booléens.

J'ai laissé la séparation pas bien utile en deux méthodes, pour limiter les modifs.

(code dans la branche)

#7

Mis à jour par Emmanuel Cazenave il y a environ 2 ans

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

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 9daa087cc5e360c9613c6ec5853f9583fb4f3308
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Fri Mar 18 13:25:31 2022 +0100

    plone_restapi: adapt list content sent to Plone (#62943)

commit 3588169e525c6d8e74ec182c51066c43b52a803c
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Fri Mar 18 13:31:06 2022 +0100

    plone_restapi: split adapt_payload function (#62943)
#9

Mis à jour par Transition automatique il y a environ 2 ans

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

Mis à jour par Nicolas Roche il y a presque 2 ans

  • Lié à Bug #64760: plone : crash sur rejeux d'une demande existante ajouté
#11

Mis à jour par Transition automatique il y a presque 2 ans

Automatic expiration

Formats disponibles : Atom PDF