Development #54447
API : type attendu vs renvoyé des identifants de fiche
0%
Description
Lorsqu'on crée une fiche son identifiant est renvoyé sous forme d'entier. Lorsqu'on l'utilise pour créer un autre fiche qui a une relation (via un champ liste) avec la fiche précédemment créé, il faut passer l'identifiant en chaîne de caractère, faute de quoi la trace ci-dessous.
Exception: type = '<class 'AssertionError'>', value = '' Stack trace (most recent call first): File "/home/cazino/src/wcs/wcs/sql.py", line 1708, in get_sql_dict_from_data 1706 value = {'data': json.loads(JSONEncoder().encode(value)), '@type': 'computed-data'} 1707 elif sql_type == 'varchar': > 1708 assert isinstance(value, str) 1709 elif sql_type == 'date': 1710 assert isinstance(value, time.struct_time)
Et donc pour une expérience top moumoute du point de vue d'un client API, on aimerait pouvoir rebalancer tel quel l'identifiant reçu.
Fichiers
Révisions associées
api: always return id as strings (#54447)
Historique
Mis à jour par Frédéric Péters il y a presque 3 ans
Lorsqu'on crée une fiche son identifiant est renvoyé sous forme d'entier
Quoi comment ?
Mis à jour par Emmanuel Cazenave il y a presque 3 ans
POST /api/cards/enfants/submit renvoie avec un payload de données renvoie :
{'err': 0, 'data': {'id': 44725, 'url': 'https://wcs.dev.publik.love/backoffice/data/enfants/44725/', 'backoffice_url': 'https://wcs.dev.publik.love/backoffice/data/enfants/44725/', 'api_url': 'https://wcs.dev.publik.love/api/cards/enfants/44725/'}}
Mis à jour par Frédéric Péters il y a presque 3 ans
Ok et après il y a quelque chose (quoi?) qui prend le résultat de cet appel et qui l'utilise pour le mettre quelque part (où?) etc. ?
J'ai sans doute besoin de davantage de contexte.
Mis à jour par Emmanuel Cazenave il y a presque 3 ans
Frédéric Péters a écrit :
Ok et après il y a quelque chose (quoi?) qui prend le résultat de cet appel et qui l'utilise pour le mettre quelque part (où?) etc. ?
Je reprend un exemple complet.
POST /api/cards/familles/submit qui renvoie
{'data': {'api_url': 'https://wcs.dev.publik.love/api/cards/adultes/240854/', 'backoffice_url': 'https://wcs.dev.publik.love/backoffice/data/adultes/240854/', 'id': 240854, 'url': 'https://wcs.dev.publik.love/backoffice/data/adultes/240854/'}, 'err': 0}
Puis ensuite POST /api/cards/familles/submit avec en payload :
{'famille': 'NOM_000935', 'adulte1': 240854}
et ça crash, tandis que ça passe avec
{'famille': 'NOM_000935', 'adulte1': '240854'}
adulte1 est un champ liste alimenté par une source de donnée qui tape dans les fiches adultes (https://demarches.famille.publik.love/backoffice/cards/20/fields/13/)
Je fais tout via l'API (sauf supprimer toutes les donnés pour pouvoir rejouer un import depuis zéro mais ça n'a rien à voir avec notre discussion)
Mis à jour par Emmanuel Cazenave il y a presque 3 ans
Faute de copié/coller dans le premier URL qui est /api/cards/adultes/submit.
Mis à jour par Frédéric Péters il y a presque 3 ans
- Fichier 0002-api-always-return-id-as-strings-54447.patch 0002-api-always-return-id-as-strings-54447.patch ajouté
- Fichier 0001-api-accept-integers-as-inputs-for-item-fields-54447.patch 0001-api-accept-integers-as-inputs-for-item-fields-54447.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
0001 pour accepter les entiers; 0002 pour fournir les identifiant sous forme de chaine.
Mis à jour par Emmanuel Cazenave il y a presque 3 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Frédéric Péters il y a presque 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 523ff3ab987e6edfbc279aa15b4fbd744f526ecc Author: Frédéric Péters <fpeters@entrouvert.com> Date: Mon May 31 21:14:57 2021 +0200 api: always return id as strings (#54447) commit 8d80ecbedbb69b44b3d75f0536df71f68f93a642 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Mon May 31 21:13:15 2021 +0200 api: accept integers as inputs for item fields (#54447)
Mis à jour par Frédéric Péters il y a presque 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
api: accept integers as inputs for item fields (#54447)