Projet

Général

Profil

Development #22395

Developper un connecteur Actesweb (MELODIE)

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Josué Kouka
Version cible:
-
Début:
09 mars 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Révision 7d0dbcb6 (diff)
Ajouté par Josué Kouka il y a plus de 5 ans

add actesweb connector (#22395)

Historique

#2

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
#3

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.

#4

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.

#5

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)

#6

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

#7

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

  • Description mis à jour (diff)
#8

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

  • Description mis à jour (diff)
#9

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

Branche mise à jour en prenant en compte vos commentaires.

#10

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

#11

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

#12

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.

#13

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.

#14

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

  • Description mis à jour (diff)
#15

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

  • Tracker changé de Bug à Development
#16

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

  • Statut changé de En cours à Solution proposée

Je vais relire.

#17

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

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

Ok.

#18

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

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é).

#20

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 ?

#21

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.

#22

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.

#23

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.

#24

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

Avec la correction sur la migration.

#25

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

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

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

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

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

Formats disponibles : Atom PDF