Projet

Général

Profil

Development #16930

WS Eudonet, appairage

Ajouté par Brice Mallet il y a presque 7 ans. Mis à jour il y a plus de 6 ans.

Statut:
Rejeté
Priorité:
Normal
Version cible:
-
Début:
16 juin 2017
Echéance:
06 octobre 2017
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

0001-add-eudonet-connector-16929.patch (13,9 ko) 0001-add-eudonet-connector-16929.patch Serghei Mihai (congés, retour 15/05), 26 juillet 2017 16:32
0001-add-eudonet-connector-16929.patch (14,6 ko) 0001-add-eudonet-connector-16929.patch Serghei Mihai (congés, retour 15/05), 27 juillet 2017 15:29
0001-add-eudonet-connector-16929.patch (14,6 ko) 0001-add-eudonet-connector-16929.patch Serghei Mihai (congés, retour 15/05), 28 juillet 2017 17:33
0001-add-eudonet-connector-16929.patch (14,7 ko) 0001-add-eudonet-connector-16929.patch Serghei Mihai (congés, retour 15/05), 28 juillet 2017 17:41

Demandes liées

Lié à Passerelle - Development #16931: WS Eudonet, modification des coordonnéesRejeté16 juin 201706 octobre 2017

Actions

Historique

#2

Mis à jour par Brice Mallet il y a presque 7 ans

#3

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.

#4

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.

#5

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.

#6

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans

Remarque de Thomas en privé: il manque le patch.
Le voici avec des tests.

#7

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.

#8

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans

  • Projet changé de Alfortville à Passerelle
  • Catégorie Eudonet supprimé
  • Version cible TC1, phase1 supprimé

Ok, bougé dans "Passerelle".

#9

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 ».

#11

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)

#13

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.

#15

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'

#16

Mis à jour par Brice Mallet il y a plus de 6 ans

  • Description mis à jour (diff)
#17

Mis à jour par Brice Mallet il y a plus de 6 ans

  • Projet changé de Alfortville à Passerelle
#18

Mis à jour par Brice Mallet il y a plus de 6 ans

  • Echéance changé de 14 juillet 2017 à 06 octobre 2017
#19

Mis à jour par Thomas Noël il y a plus de 6 ans

  • Statut changé de En cours à Rejeté

dev annulé par le client

Formats disponibles : Atom PDF