Development #16930
WS Eudonet, appairage
0%
Description
Pouvoir lier un utilisateur Publik à un "contact" (= personne physique = PP) dans Eudonet, celui-ci étant potentiellement lié à une personne morale (PM).
Selon ma compréhension actuelle, il n'y a pas de frontal web pour Eudonet, les contacts n'ont donc pas de compte d'accès à Eudonet, l'appairage ne se fera donc uniquement qu'en BO Publik par un agent, avec la simple saisie de l'identifiant contact d'Eudonet
Fichiers
Demandes liées
Historique
Mis à jour par Brice Mallet il y a presque 7 ans
- Lié à Development #16931: WS Eudonet, modification des coordonnées ajouté
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
- Statut changé de Nouveau à En cours
La table des contacts Eudonet à la structure suivante (c'est la réponse WS décrivant la table):
{ "ResultInfos": { "ApiMessage": "", "ErrorMessage": "", "ErrorNumber": 0, "Success": true }, "ResultMetaData": { "Tables": [ { "AddAllowed": true, "CalendarEnabled": false, "DescId": 200, "EdnType": 0, "Fields": [ { "DescId": 201, "Disporder": 1, "EdnFormat": 1, "ImgStorage": 1, "IsLink": false, "Label": "Nom", "Mandatory": true, "Multiple": false, "PopupDescId": 0, "PopupType": 0, "UpdateAllowed": true, "ViewAllowed": true }, ... ], "Icon": "e984", "IconDescription": { "Address": "f0c5", "Css": "icon-files-o", "Name": "Description" }, "IconInfo": { "Address": "e984", "Css": "icon-user", "Name": "Utilisateur" }, "IconNote": { "Address": "f0c5", "Css": "icon-files-o", "Name": "Notes" }, "IconPj": { "Address": "f0c6", "Css": "icon-paperclip", "Name": "Annexes" }, "Label": "Contacts", "Links": [], "LinksInfo": [] } ] } }
Je ne vois pas trop quel champ faut-il prendre comme identifiant.
Mis à jour par Thomas Noël il y a presque 7 ans
Chaque entrée dans un table a un indentifiant (numéro), c'est cela qui servira pour l'appairage.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
En effet.
Voici un premier jet.
Je rajoute les tests.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
- Fichier 0001-add-eudonet-connector-16929.patch 0001-add-eudonet-connector-16929.patch ajouté
- Patch proposed changé de Non à Oui
Remarque de Thomas en privé: il manque le patch.
Le voici avec des tests.
Mis à jour par Frédéric Péters il y a presque 7 ans
Si tu veux ça dans contrib alors tu ne peux pas l'avoir par défaut dans INSTALLED_APPS. Mais pour aller plus loin, cela devrait être un ticket technique dans Passerelle.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
- Projet changé de Alfortville à Passerelle
- Catégorie
Eudonetsupprimé - Version cible
TC1, phase1supprimé
Ok, bougé dans "Passerelle".
Mis à jour par Thomas Noël il y a presque 7 ans
- Projet changé de Passerelle à Alfortville
J'embête la terre entière avec ça : ne pas faire de property
quand ça sert à rien. Ici tu devrais avoir un simple def get_token():
, et dans request tu utilises self.get_token() qui permet de "voir" qu'il y a appel à quelque chose.
Lors de request, il faut gérer un soucis éventuel de token (code d'erreur 1xx) : demander un nouveau token et retenter (une seule fois). En gros, ça veut dire avoir un def get_token(renew=False)
et comme t'as viré la property, y'a presque rien à faire.
Ensuite, il faut être plus générique que :
def link(self, request, name_id, contact_id): endpoint='/Search/200/%s' % contact_id
On doit pouvoir se relier à « n'importe quel objet », à Alfortville ça sera un 200, mais ça peut être n'importe quoi ailleurs, n'importe quelle table. Donc ici, se relier à un couple « desc_id » et « object_id » qui seront précisés dans l'URL d'appel. On ne devrait pas faire mention de « contact_id », on se lie pas forcément à des contacts.
Ca va modifier les autres appels, où il faudra aussi préciser le « desc_id ». Et aussi l'objet EudonetContactLink qui va relier un triplet resource+name_id+desc_id à un object_id
Et avec cette idée généralisation, ne pas hésiter à poser tout cela dans « apps.eudonet ».
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
Ok. Prise en compte des remarques.
Mis à jour par Thomas Noël il y a presque 7 ans
- 100 <= data['ResultInfos']['ErrorNumber'] <= 104 sera plus joli avec un "// 100 = 1", enfin je trouve
- request(self, url, method,...) qui fait un appel au classique self.request(url, method, ...), c'est pas bien, garde les arguments dans le même ordre dans le request (method, url)
- endpoint='/Authenticate/Token' arhh non pas toi le spécialiste emacs, t'as forcément une alerterougepèpeuhuite ici ;)
- django_cache.set(cache_key, token, timeout.seconds) va expliser si renew, cache_key n'existera pas
(je relis pas plus, hein)
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
Mis à jour par Frédéric Péters il y a presque 7 ans
+ 'eudonet',
'passerelle.apps.eudonet' plutôt, petit à petit on se défait de la modif au sys.path.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans
Oui, merci.
Mis à jour par Thomas Noël il y a presque 7 ans
finalement, à relire, je propose de simplifier : def request(endpoint, method=None, data=None):
, et si method est None alors la passer à 'get' ou 'post' selon data (genre method = method or 'get' if data is None else 'post'
)
Dans request, après le second data = response.json()
, il faut refaire un test de la réponse obtenue, « if not data['ResultInfos']['Success']: raise ...»
raise APIError('%(ErrorNumber)s: %(ErrorMessage)s' % (data['ResultInfos']))
: parenthèses autour du (data[]), à mon avis inutiles
Dans :
data = response.json() if not data['ResultInfos']['Success']: raise APIError('%(ErrorNumber)s: %(ErrorMessage)s' % (data['ResultInfos'])) data = response.json()['ResultData']
le second response.json() est en trop, et en vieillissant je préfère quand une variable ne change pas de type en cours de route.
token = data['ResultData']['Token']
suffirait
Dans les tests, faut tester que les URLs des endpoints sont correctes, pour être sûr qu'elles vont pas bouger un jour ; et utiliser utils.generic_endpoint_url
pour les générer, genre :
endpoint = utils.generic_endpoint_url('eudonet', 'link') assert endpoint == '/eudonet/test/link'
Mis à jour par Brice Mallet il y a plus de 6 ans
- Echéance changé de 14 juillet 2017 à 06 octobre 2017
Mis à jour par Thomas Noël il y a plus de 6 ans
- Statut changé de En cours à Rejeté
dev annulé par le client