Development #22395
Developper un connecteur Actesweb (MELODIE)
0%
Description
Ce connecteur devra transformer les demandes w.c.s en fichier .DEM
.
Le nom d’un fichier est sous la forme suivante : AAAA-MM-JJ_hh-mm-ss_uuuuuu.DEM - où AAAA est l’année de création du fichier - où MM est le mois de création du fichier - où JJ est le jour de création du fichier - où hh est l’heure de création du fichier - où mm est la minute de création du fichier - où ss est la seconde de création du fichier - où uuuuuu est la microseconde de création du fichier Chaque élément du nom du fichier est numérique et aligné à droite (comblé avec des ‘0’ si nécessaire). Les fichiers de demande doivent avoir l’extension « .DEM ». Ex : 2005-08-03_09-33-51_308437.DEM .... Les fichiers sont au format texte, les lignes sont séparés par le caractère ‘\n’ (0x0A). Ils contiennent une balise par ligne ainsi que sa valeur sous la forme : <balise><signe égal><valeur de la balise> Les balises sont sensibles à la casse (la ligne ‘codage=’ ne sera pas reconnue alors que la ligne ‘CODAGE=’ le sera). Les balises et les valeurs des balises doivent être orthographiées correctement. Si l’ouverture du fichier de demande avec un éditeur de texte (notepad.exe par exemple) affiche d’autres caractères (espaces superflus en fin de ligne compris), la validation du fichier par ActesWeb risque d’échouer. Il ne doit pas y avoir d’espaces entre une balise, le signe égal et la valeur de la balise.
Spec interface EO: https://dev.entrouvert.org/projects/passerelle/wiki/Connecteur_Etat_Civil
wip : https://git.entrouvert.org/passerelle.git/log/?h=wip/aec_interface
Fichiers
Révisions associées
Historique
Mis à jour par Josué Kouka il y a environ 6 ans
- Sujet changé de Developper un connecteur EAC pour Dreux à Developper un connecteur AEC pour Dreux
Mis à jour par Josué Kouka il y a environ 6 ans
- Sujet changé de Developper un connecteur AEC pour Dreux à Developper un connecteur Actesweb (MELODIE)
- Statut changé de Nouveau à En cours
Un draft du connecteur est sur https://git.entrouvert.org/passerelle.git/log/?h=wip/aec_interface en attendant la validation de l'api commune AEC.
Mis à jour par Frédéric Péters il y a environ 6 ans
(Le lien dans la description pointe vers une page avec zéro information)
+ category = _('Business Process Connectors')
+ verbose_name = u"ActesWeb - Demande d'acte d'état civil"
Je serais pour avoir les différents connecteurs état civil dans leur catégorie propre, plutôt qu'inclure dans le nom du connecteur le fait que c'est de l'état civil.
+MATCHING = {
Il y a sans doute mieux comme nom. Et c'est utilisé à un seul endroit, pas besoin de taper ça de manière globale, je trouve.
+ demande_template_name = 'actesweb/demand.txt'
Sa présence à cet endroit me faisait penser que ça pouvait être un élément partagé avec les autres connecteurs mais non, et pareil, utilisé à un seul endroit il aurait plutôt sa place dans create_demand, pour ne pas allonger le jeu de piste.
+def process(payload):
Autre commentaire dans la série "pourquoi pas dans la classe ?"
+COMMENTAIRE={{application_comment}}
Il n'y a rien pour interdire des retours à la ligne ici.
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Je suis un peu étonné de l'utilisation de default_storage... on est sûr qu'en construisant le chemin comme cela on aura jamais de doublon ?
+ filepath = os.path.join(self.basepath, application_time + '.DEM')
est-ce que ActesWeb s'attend à un nommage particulier ou lit tout ce qui finit par '.DEM' ?
+def get_test_base_dir(name): + return os.path.join(os.path.dirname(__file__), 'data', name)
Les fichiers temporaires on met ça dans un settings.MEDIA temporaire, via mkdtemp() et avec une fixture et on ne nettoye pas avec un teardown_module.
Si tu as une fixture utilisée par tous tes tests tu peux utiliser autouse=True:
import temptfile import shutil @pytest.fixture(autouse=True) def media_dir(settings): settings.MEDIA = tempfile.mkdtemp() yield shutil.rmtree(settings.MEDIA, ignore_errors=True)
Mis à jour par Josué Kouka il y a environ 6 ans
Je prends en compte vos commentaires puis je corrige dans la branche.
Réponses à Benjmain
Je suis un peu étonné de l'utilisation de default_storage... on est sûr qu'en construisant le chemin comme cela on aura jamais de doublon ?
[...]
Oui je me suis posé la question aussi mais j'ai préferé suivre leur spec. Le mieux d'avoir l'id de la demande au lieu de millisecondes.
est-ce que ActesWeb s'attend à un nommage particulier ou lit tout ce qui finit par '.DEM' ?
Oui l'application attend un nommage particuler : %Y-%m-%d_%H-%M-%S_%f.DEM
[...]
Les fichiers temporaires on met ça dans un settings.MEDIA temporaire, via mkdtemp() et avec une fixture et on ne nettoye pas avec un teardown_module.
Si tu as une fixture utilisée par tous tes tests tu peux utiliser autouse=True:
[...]
Ok
Mis à jour par Josué Kouka il y a environ 6 ans
Branche mise à jour en prenant en compte vos commentaires.
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Josué Kouka a écrit :
Je prends en compte vos commentaires puis je corrige dans la branche.
Réponses à Benjmain
Je suis un peu étonné de l'utilisation de default_storage... on est sûr qu'en construisant le chemin comme cela on aura jamais de doublon ?
[...]Oui je me suis posé la question aussi mais j'ai préferé suivre leur spec. Le mieux d'avoir l'id de la demande au lieu de millisecondes.
est-ce que ActesWeb s'attend à un nommage particulier ou lit tout ce qui finit par '.DEM' ?
Tu ne suis pas la spéc: « @où AAAA est l’année de création du fichier» », application_time c'est un truc envoyé au WS, ce n'est pas du tout la date de création du fichier, je reconnais qu'avec des microsecondes c'est dur de faire des doublons mais bon je ne dépendrai pas sur ce coup là du client qui pourrait nous envoyer des trucs précis seulement à la seconde. Je trouverai plus clair de faire:
while True: filename = django.utils.timezone.now().strftime('%Y-%m-%d_%H-%M-%S_%f.DEM') filepath os.path.join(base, filename) saved_name = default_storage.save(filepath, content) if filename == saved_name: break default_storage.delete(saved_name)
avec un test de collision si par un immense hasard on créait deux demandes au même moment.
On sait comment l'application viendra lire les fichiers ? Pas de possibilité qu'elle vienne lire un fichier en train d'être écrit ? (voilà pourquoi je n'aime pas les classes storage de Django, si c'est juste pour manipuler des fichiers on est plus à l'aise en python pur, à faire des O_CREATE, fsync, des link/unlink, default_storage on lui demande simplement de nous trouver un répertoire à la rigueur).
Mis à jour par Josué Kouka il y a environ 6 ans
Benjamin Dauvergne a écrit :
Josué Kouka a écrit :
Je prends en compte vos commentaires puis je corrige dans la branche.
Réponses à Benjmain
Je suis un peu étonné de l'utilisation de default_storage... on est sûr qu'en construisant le chemin comme cela on aura jamais de doublon ?
[...]Oui je me suis posé la question aussi mais j'ai préferé suivre leur spec. Le mieux d'avoir l'id de la demande au lieu de millisecondes.
est-ce que ActesWeb s'attend à un nommage particulier ou lit tout ce qui finit par '.DEM' ?
Tu ne suis pas la spéc: « @où AAAA est l’année de création du fichier» », application_time c'est un truc envoyé au WS, ce n'est pas du tout la date de création du fichier, je reconnais qu'avec des microsecondes c'est dur de faire des doublons mais bon je ne dépendrai pas sur ce coup là du client qui pourrait nous envoyer des trucs précis seulement à la seconde.
Vrai, je ne sais pas pourquoi dans ma tete c'était la date de reception de la demande.
Je trouverai plus clair de faire:
[...]
avec un test de collision si par un immense hasard on créait deux demandes au même moment.On sait comment l'application viendra lire les fichiers ? Pas de possibilité qu'elle vienne lire un fichier en train d'être écrit ?
Ce sera identique à ce qui a été fait dans les autres cas. On liste et deplace les fichiers dans un repertoire, on les traite, puis on les déplace dans un repertoire Traité
.
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Euh, qui liste ? qui déplace ? Un script shell lancé par CRON ? Ça fait just mv /var/lib/...media/actesweb/* /var/lib/sftp/acteweb/ ?
Dans ces cas ce serait mieux de faire un write -> actesweb/tmp/, fsync(), puis rename() vers actesweb/new/ et comme ça on peut dormir.
Mis à jour par Josué Kouka il y a environ 6 ans
Benjamin Dauvergne a écrit :
Euh, qui liste ? qui déplace ? Un script shell lancé par CRON ? Ça fait just mv /var/lib/...media/actesweb/* /var/lib/sftp/acteweb/ ?
Un script du client, qui prend les demande et les met dans un dossier afin de les traiter.
Dans ces cas ce serait mieux de faire un write -> actesweb/tmp/, fsync(), puis rename() vers actesweb/new/ et comme ça on peut dormir.
Ok, j'ai mis à jour la branche avec les modifs.
Mis à jour par Benjamin Dauvergne il y a presque 6 ans
- Statut changé de En cours à Solution proposée
Je vais relire.
Mis à jour par Benjamin Dauvergne il y a presque 6 ans
- Statut changé de Solution proposée à Solution validée
Ok.
Mis à jour par Josué Kouka il y a plus de 5 ans
- Fichier 0001-add-actesweb-connector-22395.patch 0001-add-actesweb-connector-22395.patch ajouté
- Statut changé de Solution validée à Solution proposée
- Patch proposed changé de Non à Oui
J'ai sorti le connecteur Actesweb
de la branche http://git.entrouvert.org/passerelle.git/log/?h=wip/aec_interface.
Voici le patch (Benj avait déjà validé).
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Je ne comprends pas, ça ne dépend pas des patchs précédents de la branche ?
Mis à jour par Serghei Mihai il y a plus de 5 ans
Le patch a été refait pour ne pas dependre de l'interface "état civil": http://git.entrouvert.org/passerelle.git/commit/?h=wip/aec_interface&id=5a60f547aa5b721b52faa2599105f8372bba39c5
Il fait référence à une dependance de migration non-existente, mais une fois corrigé, les tests passent.
Mis à jour par Serghei Mihai il y a plus de 5 ans
Après discussion avec Brice il semble que les tentatives d'établir une interface générique fonctionnelle pour le connecteur d'état civil n'ont pas abouti: trop de spécificités pour les logiciels.
Mis à jour par Frédéric Péters il y a plus de 5 ans
Je ne suis pas d'accord mais il faut alors aller noter ça dans #16768, et le rejeter.
Mis à jour par Josué Kouka il y a plus de 5 ans
Avec la correction sur la migration.
Mis à jour par Serghei Mihai il y a plus de 5 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Serghei Mihai il y a plus de 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 7d0dbcb654cdd9c8298047a033965165a79ba1fd (origin/master, origin/HEAD) Author: Josue Kouka <jkouka@entrouvert.com> Date: Fri Mar 30 15:13:32 2018 +0200 add actesweb connector (#22395)
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Fermé
add actesweb connector (#22395)