Ce moteur fait partie de la collection des publiposting-engine
d'api-doc2
Il permet de pousser les document Word
publiposté sur un serveur compatible S3
Sur cet endpoint le client est configuré
Il reçoit sa configuration minio et cela lui permet d'initialiser sa connexion au dépot de documents
{
"host":"host",
"access_key":"access_key",
"pass_key":"pass_key"
}
200 en cas de réussite et 500 en cas d'erreur
Tant que l'api n'a pas été configurée par une requête HTTP sur cet endpoint elle va renvoyer un message d'erreur disant qu'elle n'est pas configurée.
Pour utiliser ce moteur en standalone il faut le donc le configurer en HTTP.
Sur cet endpoint sont indiqués quels templates charger depuis le dépot
[
{
"template_name":"name",
"bucket_name":"nale"
},
{
"template_name":"name",
"bucket_name":"nale"
},
]
template_name
est donc le chemin d'accès ou aller chercher le document, il sera exposé avec le même nom pour la suite des actions.bucket_name
est simplement le nom du bucket dans lequel aller charger le document
La requête contient donc une liste d'objet contenant ces deux informations.
Il renvoit une liste de success et error
{
"name": "template_name"
}
Renvoie toutes les variables du document sous la forme d'une liste de string
Sur cet endpoint on peut publiposter des documents
{
"data":{},
"name":"template_name",
"output_bucket": "name",
"output_name": "name",
"options":{
"push_result": true
}
}
data
est un JSON arbitraire qui sera utilisé pour mettre les informations dans le documentname
est le nom du template à utiliséoutput_bucket
nom du bucket sur lequel poussé le fichier de sortieoutput_name
nom du fichier de sortieoptions
contient les options de rendu (pour l'instant, il n'y a pas de support)
Le résutat renvoyé actuellement est juste un boolean donnant le succès ou l'échec de l'opération
Cette application repose la bibliothèque de publipostage docxTpl écrite en python et qui repose sur le moteur de template Jinja2.
Il est donc possible de faire du templating de façon assez puissante dans le document
La syntaxe est donc celle du Jinja2 à quelques exceptions près.
Le Dockerfile permet de construire une image Docker exposant l'application sur le port 5000
, il suffit donc de mettre cette application derrière la gateway api-doc2
Pour cela rien de très compliqué, il faut juste indiqué dans la conf d'api-doc2 l'addresse et le port de ce container
Apres avoir installé le requirements.txt
on peut faire
$ ./start_dev.sh
pour démarrer l'application.
Normalement il n'y a presque rien à faire sur ce moteur, toute la manipulation de données se déroule sur api-doc2.
Le moteur ici ne sait pas manipuler les données et ça tombe bien ce n'est pas son rôle. Ici le moteur est bête et toute l'intelligence se trouve dans api-doc2.
Pourquoi faire comme ça ?
Eh bien cela permet de séparer les problèmes en cas de bug.
De plus cela permet d'avoir un seul endroit ou les données sont manipulées, du coup aucun des moteur n'a besoin de savoir le faire.
Ainsi quand ce moteur parse le champs :
mission.StudentDocRef___student_REM__
c'est api-doc2 qui fait la transformation vers mission.StudentDocRef(#student, "REM")
et le jour les règles de parsing changent alors on peut mettre à jour d'un coup pour tous les moteurs.
Du coup c'est assez simple à utiliser, il suffit d'utiliser l'opérateur "." pour traverser l'objet et avoir la propriété qui nous interresse.
- ajouter le renvoie du doc compléter dans la reqûete en option, cela permet de ne pas utiliser de client S3 si on en a pas besoin
- ajouter le choix d'upload le template directement dans le /load_templates