Projet

Général

Profil

Development #54447

API : type attendu vs renvoyé des identifants de fiche

Ajouté par Emmanuel Cazenave il y a presque 3 ans. Mis à jour il y a presque 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
31 mai 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Révision 8d80ecbe (diff)
Ajouté par Frédéric Péters il y a presque 3 ans

api: accept integers as inputs for item fields (#54447)

Révision 523ff3ab (diff)
Ajouté par Frédéric Péters il y a presque 3 ans

api: always return id as strings (#54447)

Historique

#1

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 ?

#2

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/'}}
#3

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.

#5

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)

#6

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.

#8

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

0001 pour accepter les entiers; 0002 pour fournir les identifiant sous forme de chaine.

#9

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

  • Assigné à mis à Frédéric Péters
#10

Mis à jour par Emmanuel Cazenave il y a presque 3 ans

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

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)
#12

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

Formats disponibles : Atom PDF