Projet

Général

Profil

Development #15883

Connecteur Etat Civil CityWeb

Ajouté par Josué Kouka il y a environ 7 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Josué Kouka
Version cible:
-
Début:
14 avril 2017
Echéance:
12 juin 2017
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Le connecteur devra transformer les demandes d'état civil venant de WCS en fichier XML.
Comme pour MDEL, la demande xml devra etre mise à disposition du client sur un sftp.


Fichiers

cityweb_etat_civil.xsd (7,15 ko) cityweb_etat_civil.xsd Josué Kouka, 14 avril 2017 14:53
0004-add-cityweb-element-types.patch (4,95 ko) 0004-add-cityweb-element-types.patch Josué Kouka, 23 mai 2017 11:23
0003-add-city-web-data-source-endpoints.patch (9,58 ko) 0003-add-city-web-data-source-endpoints.patch Josué Kouka, 23 mai 2017 11:23
0002-add-cityweb.xsd-file.patch (7,73 ko) 0002-add-cityweb.xsd-file.patch Josué Kouka, 23 mai 2017 11:23
0001-add-cityweb-app-into-test-settings.patch (900 octets) 0001-add-cityweb-app-into-test-settings.patch Josué Kouka, 23 mai 2017 11:23
0007-cityweb-add-demands-processing-15883.patch (9,84 ko) 0007-cityweb-add-demands-processing-15883.patch Josué Kouka, 31 mai 2017 13:44
0006-cityweb-add-json-to-xml-converter-function-15883.patch (3,05 ko) 0006-cityweb-add-json-to-xml-converter-function-15883.patch Josué Kouka, 31 mai 2017 13:44
0005-cityweb-add-var-to-xml-elt-mapping-15883.patch (18,2 ko) 0005-cityweb-add-var-to-xml-elt-mapping-15883.patch Josué Kouka, 31 mai 2017 13:44
0004-cityweb-add-tests-data-15883.patch (31,3 ko) 0004-cityweb-add-tests-data-15883.patch Josué Kouka, 31 mai 2017 13:44
0003-cityweb-add-template-15883.patch (9,79 ko) 0003-cityweb-add-template-15883.patch Josué Kouka, 31 mai 2017 13:44
0002-cityweb-add-city-web-data-source-endpoints-15883.patch (11,6 ko) 0002-cityweb-add-city-web-data-source-endpoints-15883.patch Josué Kouka, 31 mai 2017 13:44
0001-add-cityweb-app-into-test-settings-15883.patch (1,14 ko) 0001-add-cityweb-app-into-test-settings-15883.patch Josué Kouka, 31 mai 2017 13:44
0006-cityweb-add-demands-processing-15883.patch (9,84 ko) 0006-cityweb-add-demands-processing-15883.patch Josué Kouka, 31 mai 2017 13:53
0005-cityweb-add-json-to-xml-converter-function-15883.patch (3,05 ko) 0005-cityweb-add-json-to-xml-converter-function-15883.patch Josué Kouka, 31 mai 2017 13:53
0004-cityweb-add-var-to-xml-elt-mapping-15883.patch (18,2 ko) 0004-cityweb-add-var-to-xml-elt-mapping-15883.patch Josué Kouka, 31 mai 2017 13:53
0003-cityweb-add-tests-data-15883.patch (31,3 ko) 0003-cityweb-add-tests-data-15883.patch Josué Kouka, 31 mai 2017 13:53
0002-cityweb-add-template-15883.patch (9,79 ko) 0002-cityweb-add-template-15883.patch Josué Kouka, 31 mai 2017 13:53
0001-cityweb-add-city-web-data-source-endpoints-15883.patch (12,5 ko) 0001-cityweb-add-city-web-data-source-endpoints-15883.patch Josué Kouka, 31 mai 2017 13:53
0001-cityweb-add-cityweb-connector-15883.patch (75,2 ko) 0001-cityweb-add-cityweb-connector-15883.patch Josué Kouka, 01 juin 2017 04:42
0001-cityweb-add-cityweb-connector-15883.patch (39,5 ko) 0001-cityweb-add-cityweb-connector-15883.patch Josué Kouka, 16 août 2017 18:31
0001-cityweb-add-cityweb-connector-15883.patch (40,7 ko) 0001-cityweb-add-cityweb-connector-15883.patch Josué Kouka, 17 août 2017 14:32
0001-cityweb-add-cityweb-connector-15883.patch (40,8 ko) 0001-cityweb-add-cityweb-connector-15883.patch Josué Kouka, 18 août 2017 14:29
0001-cityweb-add-cityweb-connector-15883.patch (41,1 ko) 0001-cityweb-add-cityweb-connector-15883.patch Josué Kouka, 18 août 2017 19:25
0001-cityweb-add-cityweb-connector-15883.patch (41,2 ko) 0001-cityweb-add-cityweb-connector-15883.patch Josué Kouka, 04 septembre 2017 19:13
0001-cityweb-add-cityweb-connector-15883.patch (41,2 ko) 0001-cityweb-add-cityweb-connector-15883.patch Josué Kouka, 05 septembre 2017 09:14
0001-cityweb-add-cityweb-connector-15883.patch (40 ko) 0001-cityweb-add-cityweb-connector-15883.patch Josué Kouka, 05 septembre 2017 19:05
0001-cityweb-add-cityweb-connector-15883.patch (40,1 ko) 0001-cityweb-add-cityweb-connector-15883.patch Josué Kouka, 19 septembre 2017 23:18

Demandes liées

Lié à Passerelle - Bug #16646: mdel: factoriser les outils xml utilisé par le connecteur.Rejeté31 mai 2017

Actions
Lié à Passerelle - Bug #16768: Faire une api commune pour les connecteurs d'état civilRejeté08 juin 2017

Actions

Révisions associées

Révision 002e266b (diff)
Ajouté par Josué Kouka il y a plus de 6 ans

cityweb: add cityweb connector (#15883)

Révision 3dbb768d (diff)
Ajouté par Frédéric Péters il y a plus de 6 ans

misc: declare missing python-dateutil dependency (#15883)

Historique

#2

Mis à jour par Josué Kouka il y a environ 7 ans

Le connecteur devra transformer les demandes d'état civil venant de WCS en fichier XML.
Comme pour MDEL, la demande xml devra etre mise à disposition du client sur un sftp.

#3

Mis à jour par Josué Kouka il y a environ 7 ans

  • Description mis à jour (diff)
#4

Mis à jour par Josué Kouka il y a presque 7 ans

Ce n'est pas vraiment un vrai patch, juste une ébauche.
le endpoint existe, mais il me reste la partie processing de la demane wcs.

#5

Mis à jour par Josué Kouka il y a presque 7 ans

Par rapport au 0005, pour une raison que je n'ai pas encore percée, lors de la validation par du xml généré par le schema les éléments pere et mère de l’intéressé ou du conjoint semble pas être attendu, du coup je les ai mis en commentaire pour l'instant. Si quelqu'un a une explication, je suis intéressé.

#7

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

Comme cityweb est une vraie application et pas quelque chose de spécifique à Orléans, la mettre dans passerelle.apps (surtout si derrière c'est pour l'activer tout le temps).

CANALS = [
    {"id": "internet", "text": "Internet"},
    {"id": "guichet", "text": "Guichet"},

Je veux bien passer sur les "text" qui ignorent gettext mais CANALS, quand même, faudrait traduire.

        verbose_name = "CityWeb - Demande d'acte d'etat civil" 

état.

    @endpoint(serializer_type='json-api', perm='can_access')
    def titles(self, request, without=''):
        return TITLES

Ici et dans d'autres endpoints type "source de données", pourquoi json-api ?

PASSERELLE_APP_CITYWEB_ENABLED = True

Ce n'est plus nécessaire.

@mock.patch('passerelle.contrib.cityweb.utils.get_resource_base_dir', CITYWEB_TEST_BASE_DIR)
def test_demand_creation(app, setup, payload):
    if 'naissance' in payload:
        pass
    elif 'mariage' in payload:
        pass
    else:
        pass

Pas vraiment de sens d'avoir ce test vide, il me semble.

        demand, created = Demand.objects.get_or_create(resource=self, demand_id='demand_id',
                                                       kind='kind')

Mais ça va toujours donner la même demande; il y a un bug ici.

0002-cityweb-add-template-15883.patch aucun sens à être isolé.

0003, 0004, pareil.

0005-cityweb-add-json-to-xml-converter-function-15883.patch

Encore une nouvelle manière de gérer de l'xml dans Passerelle, variation autour d'un thème imposé, chouette. (NON!)

De loin on dirait que ça copie/colle mdel et retire/ajoute une méthode différente (pour l'ElementFactory) et ajoute une gestion des namespaces dans le json_to_xml. Le code ne peut pas être partagé ?

0006-cityweb-add-demands-processing-15883.patch, enfin, du code, là ça ne sert vraiment à rien d'avoir six patchs pour le tout, pas de la sorte en tout cas. (vraiment "Demand" existe mais ne sert à rien dans 0001 et puis voilà 0006 et là il sert enfin mais soudainement on découvre que le modèle doit changer, donc une phase 1 où on aurait pu réfléchir au modèle qu'il soit bon dès le début, c'est même pas ça).

(et je ne parle pas des migrations)

Tape tout ça dans un commit unique, tape ça dans une branche, on ne pourra pas relire autrement.

#8

Mis à jour par Josué Kouka il y a presque 7 ans

  • Lié à Bug #16646: mdel: factoriser les outils xml utilisé par le connecteur. ajouté
#9

Mis à jour par Josué Kouka il y a presque 7 ans

Avec les modifications demandées

#10

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

Commentaire sur le reste plus tard, et ne rien faire là-dessus pour le moment mais quand même, je n'aime vraiment pas ce code de génération XML, ce mapping.py illisible. Écrit à la main ? quelle souffrance. Généré automatiquement ? ne devrait pas être dans le dépôt. Un peu des deux ? inmaintenable.

Il y a des gros bouts qui sont là pour ? (rien ?) (pourquoi en commentaire)

    # # <evenement><interesse><pere><noms><nomDeFamille>
    # ("concerned_father_names_family", "evenement_interesse_pere_noms_nomDeFamille"),

    # <demandeur><qualiteDemandeur>
    ("applicant_kind", "demandeur_qualiteDemandeur"),

De manière générale, n'y a-t-il pas du code permettant depuis "<demandeur><qualiteDemandeur>" de trouver "demandeur_qualiteDemandeur", ou l'inverse ? Plutôt que ces répétitions sources d'erreur et d'illisibilité ?

Illisibilité qui se retrouve derrière copiée dans cityweb_detail.html.

#11

Mis à jour par Serghei Mihai il y a presque 7 ans

Discuté à l'instant lors de la pause déj: vu qu'on a déjà 2 connecteurs d'état civil, ne peut on avoir un seul qui expose la même API à Publik et qui transforme les demandes en fonction de la plateforme cible derrière. Comme on l'a fait dans le connecteur générique famille avec ses loaders spécifiques.

#12

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

Discuté à l'instant lors de la pause déj: vu qu'on a déjà 2 connecteurs d'état civil, ne peut on avoir un seul qui expose la même API à Publik et qui transforme les demandes en fonction de la plateforme cible derrière. Comme on l'a fait dans le connecteur générique famille avec ses loaders spécifiques.

C'est la même discussion et conclusion que jeudi dernier.

#13

Mis à jour par Serghei Mihai il y a presque 7 ans

  • Echéance mis à 12 juin 2017
#14

Mis à jour par Josué Kouka il y a presque 7 ans

  • Lié à Bug #16768: Faire une api commune pour les connecteurs d'état civil ajouté
#15

Mis à jour par Josué Kouka il y a plus de 6 ans

Ok la version du connecteur CityWeb apres #16768

#16

Mis à jour par Frédéric Péters il y a plus de 6 ans

class Father(Person):
    tagname = 'pere'
    pattern = 'parent1_'

Il n'y a rien dans les specs assurant que "parent1_" correspond au "père".

#17

Mis à jour par Frédéric Péters il y a plus de 6 ans

    @endpoint(perm='can_access')
    def channels(self, request):
        return {'data': CHANNELS}

Il n'y a rien dans la spec parlant de "channels".

#18

Mis à jour par Josué Kouka il y a plus de 6 ans

Frédéric Péters a écrit :

[...]

Il n'y a rien dans les specs assurant que "parent1_" correspond au "père".

Pour éviter de faire un mapping bizarre comme je l'avais fait dans les anciens patch, je suis parti sur un data binding.
Du coup j'ai nommé les classes comme je le sentais.

tagname represente l'element xml lié à cet objet.
pattern me permet d'extraire les champs relatifs à cet objet du payload (ou une extraction de ce payload) reçu.

fichier xsd dans https://dev.entrouvert.org/issues/15219

#19

Mis à jour par Frédéric Péters il y a plus de 6 ans

Pour éviter de faire un mapping bizarre comme je l'avais fait dans les anciens patch, je suis parti sur un data binding.
Du coup j'ai nommé les classes comme je le sentais.

(je ne commente même pas)

class Father(Person):
    tagname = 'pere'
    pattern = 'parent1_'

Si je lis cet extrait correctement, et le code autour, le résultat sera un nœud "pere" pour les données présentes dans les clés …parent1_… du dictionnaire.

Rien ne dit dans la spec que "parent1" doit correspondre au "père". Je veux dire par là qu'une demande réalisée depuis w.c.s., elle pourra envoyer "concerned_parent1_firstnames": "Marie" et le code posera ça dans un nœud "pere", ce qui me semble une erreur.

#20

Mis à jour par Josué Kouka il y a plus de 6 ans

Frédéric Péters a écrit :

Pour éviter de faire un mapping bizarre comme je l'avais fait dans les anciens patch, je suis parti sur un data binding.
Du coup j'ai nommé les classes comme je le sentais.

(je ne commente même pas)

[...]

Si je lis cet extrait correctement, et le code autour, le résultat sera un nœud "pere" pour les données présentes dans les clés …parent1_… du dictionnaire.

Rien ne dit dans la spec que "parent1" doit correspondre au "père". Je veux dire par là qu'une demande réalisée depuis w.c.s., elle pourra envoyer "concerned_parent1_firstnames": "Marie" et le code posera ça dans un nœud "pere", ce qui me semble une erreur.

Ok je comprends mieux, le parent1 et parent2 c'est dans l'optique de pouvoir utiliser une commune avec MDEL. Il y'a une documentation sur ce connecteur qui doit etre écrite.
C'est peut etre erreur, et il faudrait peut etre juste nommer les variables relatives aux parents de manière plus explicite e.g concerned_father_lastname ou concerned_mother_lastname

#21

Mis à jour par Serghei Mihai il y a plus de 6 ans

J'aurais nommé EVENTS_KIND en ACT_KIND car il ne s'agit pas d'un évenement mais d'un acte.

Quel est l'usage du paramètre without (que j'aurais appelé plutôt exclude)? Dans quels cas on va devoir exclure certains types de documents ou actes?

Dans la classe CivilStatusApplication il y a un print qui traine.

#22

Mis à jour par Serghei Mihai il y a plus de 6 ans

from passerelle.contrib.mdel.utils import zipdir

Surtout pas! Les connecteurs sont indépendants.

#23

Mis à jour par Josué Kouka il y a plus de 6 ans

Patch avec les modifications demandées.
Pour rester cohérent :
channles -> origin
event kind -> certificate type (comme la variable passée)

Quel est l'usage du paramètre without (que j'aurais appelé plutôt exclude)? Dans quels cas on va devoir exclure certains types de documents ou actes?

Il peut y arriver que pour une raison x on ne gère pas les EXTPL (extrait plurilingue) par exemple. Il sera donc inutile de l'avoir dans une liste d'un formulaire.
Ces endpoints sont présents pour être des sources de données.

#24

Mis à jour par Serghei Mihai il y a plus de 6 ans

Il manque lxml dans tox.ini.

ORIGINGS = [...  <-- quelle langue ?

Les fichier zip produit serait dans media/cityweb/<slug>/<demand_id>/<demand_id>.zip. Pourquoi créer des répértoires par demande? Cityweb attend un zip ou un fichier xml?

#25

Mis à jour par Josué Kouka il y a plus de 6 ans

Serghei Mihai a écrit :

Il manque lxml dans tox.ini.

[...]

Les fichier zip produit serait dans media/cityweb/<slug>/<demand_id>/<demand_id>.zip. Pourquoi créer des répértoires par demande? Cityweb attend un zip ou un fichier xml?

Voilà, avec les modifications

Cityweb attend un zip ou un fichier xml?

No sé pour l'instant.

#26

Mis à jour par Frédéric Péters il y a plus de 6 ans

No sé pour l'instant.

Mais euh, pour faire un connecteur, faut un peu savoir ça, non ?

#27

Mis à jour par Frédéric Péters il y a plus de 6 ans

Encore et toujours.

class Father(Person):
    tagname = 'pere'
    pattern = 'father_'

La spec ne parle pas de father_ et mother_ mais de parent1_ et parent2_. Je ne sais pas comment faire passer le message : il faut écrire du code. Ou dire qu'on se contrefiche d'une spec qu'on a écrit nous-mêmes. Ou discuter pour changer la spec.

#28

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Serghei Mihai a écrit :

Il manque lxml dans tox.ini.

Si lxml est une dépendance du paquet alors ça doit être pris en charge par setup.py et il n'est alors pas besoin de le répéter dans tox.ini, sinon il y a un problème.

#29

Mis à jour par Josué Kouka il y a plus de 6 ans

Frédéric Péters a écrit :

No sé pour l'instant.

Mais euh, pour faire un connecteur, faut un peu savoir ça, non ?

Oui, mais c'est pas si grave en soi, vu que l'archive et le fichier xml sont quand meme fournis.

La spec ne parle pas de father_ et mother_ mais de parent1_ et parent2_. Je ne sais pas comment faire passer le message : il faut écrire du code. Ou dire qu'on se contrefiche d'une spec qu'on a écrit nous-mêmes. Ou discuter pour changer la spec.

Dans ta précédente intervention, j'ai cru comprendre que le fait d'utiliser parent n'avait pas trop de sens car non présent dans la spécification (xsd).
Sauf si par spéc tu entends https://dev.entrouvert.org/projects/passerelle/wiki/Connecteur_Etat_Civil.

#30

Mis à jour par Frédéric Péters il y a plus de 6 ans

Sauf si par spéc tu entends https://dev.entrouvert.org/projects/passerelle/wiki/Connecteur_Etat_Civil.

Oui bien sûr, la spécification pour nos connecteur état civil, dont tu es l'auteur, qui est discutée dans #17477.

#31

Mis à jour par Josué Kouka il y a plus de 6 ans

Frédéric Péters a écrit :

Sauf si par spéc tu entends https://dev.entrouvert.org/projects/passerelle/wiki/Connecteur_Etat_Civil.

Oui bien sûr, la spécification pour nos connecteur état civil, dont tu es l'auteur, qui est discutée dans #17477.

Ok. Je vais changer la spec afin que les paramètres attendus dans le payload, quand il s'agit des parents soient father et mother pour la seule raison que citywbe et mdel attendent un xml avec les éléments père et mère.

#32

Mis à jour par Josué Kouka il y a plus de 6 ans

Principalement modification est l'utilisation de parent{1,2} au lieu de father et mother.
On se base sur le sex pour determiner le type de parent de parent. Dans le cas ou l'attribut n'est pas fourni, on suppose que parent1 = father et parent2 = mother.

#33

Mis à jour par Serghei Mihai il y a plus de 6 ans

Tu peux rebaser sur master et recoller le patch?

#34

Mis à jour par Josué Kouka il y a plus de 6 ans

Serghei Mihai a écrit :

Tu peux rebaser sur master et recoller le patch?

Done

#35

Mis à jour par Serghei Mihai il y a plus de 6 ans

La fonction pretty sert uniquement à visualiser le XML généré? L'appeler plutôt __str__ ou __unicode__ ?

#36

Mis à jour par Josué Kouka il y a plus de 6 ans

Serghei Mihai a écrit :

La fonction pretty sert uniquement à visualiser le XML généré?

Oui

L'appeler plutôt __str__ ou __unicode__ ?

J'ai pris en compte ta proposition

#37

Mis à jour par Frédéric Péters il y a plus de 6 ans

            if not attr:
                continue
            if isinstance(attr, (str, unicode)) and attr:

Je ne vois pas les situations où le "and attr" est utile.

#38

Mis à jour par Frédéric Péters il y a plus de 6 ans

class Certificate(SimpleType):
    tagname = 'natureEvenement'
    allowed_values = ('NAI', 'DEC', 'MAR', 'REC')

Ces valeurs dupliquent une information présente dans CERTIFICATE_TYPES. (pareil pour les autres énumérations)

Je ne pige pas le sens de l'objet "Demand"; en fait j'imagine qu'il gagne son sens avec l'ajout d'une récupération de statut et que le patch est incomplet. Le patch est incomplet ?

#39

Mis à jour par Josué Kouka il y a plus de 6 ans

Je ne pige pas le sens de l'objet "Demand"; en fait j'imagine qu'il gagne son sens avec l'ajout d'une récupération de statut et que le patch est incomplet. Le patch est incomplet ?

Le patch est complet. Pas de récupération de statut avec cityweb. Je pense que c'est assez utile d'avoir quelques infos sur la demande dans passerelle, pratique en cas de pépin (expérience tirée de MDEL).

#40

Mis à jour par Frédéric Péters il y a plus de 6 ans

Je pense que c'est assez utile d'avoir quelques infos sur la demande dans passerelle, pratique en cas de pépin (expérience tirée de MDEL).

Tell me more. On a toutes les informations au niveau du file system : created_at (date du fichier), updated_at (pas pertinent jamais de modif), received_at (dans le fichier), resource (toujours la même), demand_id (dans le payload et le nom du fichier), kind (dans le fichier).

@endpoint...
def create(...):
    ...
    application = CivilStatusApplication(payload)
    application.save() # qui fasse le truc xml/zip
    return {'data': {'demand_id': application.get_demand_id()}}    

Plutôt que le jeu de piste actuel, où le endpoint crée demand_id mais retourne le résultat de demand.create(...) qui est en fait le demand_id qu'on avait déjà, et sans aucun rapport avec ce que la fonction zip() appelée dans le create() retourne (qui n'est pas utilisé).

#41

Mis à jour par Josué Kouka il y a plus de 6 ans

Frédéric Péters a écrit :

Je pense que c'est assez utile d'avoir quelques infos sur la demande dans passerelle, pratique en cas de pépin (expérience tirée de MDEL).

Tell me more. On a toutes les informations au niveau du file system : created_at (date du fichier), updated_at (pas pertinent jamais de modif), received_at (dans le fichier), resource (toujours la même), demand_id (dans le payload et le nom du fichier), kind (dans le fichier).

Ok. Je disais juste que c'était plus pratique. Ok pour supprimer cet objet.

[...]

Plutôt que le jeu de piste actuel, où le endpoint crée demand_id mais retourne le résultat de demand.create(...) qui est en fait le demand_id qu'on avait déjà, et sans aucun rapport avec ce que la fonction zip() appelée dans le create() retourne (qui n'est pas utilisé).

Pris en compte.

#42

Mis à jour par Josué Kouka il y a plus de 6 ans

Patch ne générant que des archives. Le fichier xml produit est supprimé apres archivage.

#43

Mis à jour par Serghei Mihai il y a plus de 6 ans

Ok pour moi.

#44

Mis à jour par Josué Kouka il y a plus de 6 ans

  • Statut changé de En cours à Résolu (à déployer)
  • % réalisé changé de 0 à 100
commit 002e266bae1e064d999274fe6d9c50d3ec06539a
Author: Josue Kouka <jkouka@entrouvert.com>
Date:   Tue May 23 00:40:18 2017 +0200

    cityweb: add cityweb connector (#15883)
#45

Mis à jour par Frédéric Péters il y a plus de 6 ans

commit 3dbb768db7a10054501c2fccfa683da58c85e754
Author: Fred de la Conciergerie <fpeters@entrouvert.com>
Date:   Thu Sep 21 14:06:33 2017 +0200

    misc: declare missing python-dateutil dependency (#15883)
#46

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF