Development #62943
plone_restapi: zapper les dictionnaires dont les valeurs de toutes les clés sont vides
0%
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
Révisions associées
plone_restapi: adapt list content sent to Plone (#62943)
Historique
Mis à jour par Nicolas Roche il y a environ 2 ans
- Fichier 0002-plone_restapi-adapt-list-content-sent-to-Plone-62943.patch 0002-plone_restapi-adapt-list-content-sent-to-Plone-62943.patch ajouté
- Fichier 0001-plone_restapi-split-adapt_payload-function-62943.patch 0001-plone_restapi-split-adapt_payload-function-62943.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
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.
Mis à jour par Nicolas Roche il y a environ 2 ans
- Fichier 0002-plone_restapi-adapt-list-content-sent-to-Plone-62943.patch 0002-plone_restapi-adapt-list-content-sent-to-Plone-62943.patch ajouté
Fait.
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
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)
Mis à jour par Emmanuel Cazenave il y a environ 2 ans
- Statut changé de Solution proposée à Solution validée
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)
Mis à jour par Transition automatique il y a environ 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Nicolas Roche il y a presque 2 ans
- Lié à Bug #64760: plone : crash sur rejeux d'une demande existante ajouté
plone_restapi: split adapt_payload function (#62943)