La vue Rapidexo est une application qui permet de former des feuilles de 30 petits exercices techniques à partir d'une base d'exercices classés par thèmes.
L'utilisateur choisit un nombre d'exercices pour les thèmes proposés (le nombre total doit être 30). L'application renvoie des exercices aléatoires pour chaque thème. L'utilisateur peut télécharger au format pdf la feuille complète des énoncés ou des corrigés. Il peut aussi naviguer directement entre les énoncés.
###1. Organisation
Le fichier principal est la page rapidexo.js de l'application React-Gatsby. Des requêtes sont effectuées vers un serveur Gunicorn-Flask, vers le serveur GitHub qui contient les sources et vers un serveur latexOnline qui effectue la compilation LateX comme un service.
Côté React-Gatsby, la dynamique de la page est gérée à l'aide d'états en utilisant le "hook" useState
.
Former une liste de références d'exercices
côté Gatsby. La fonction themesINPUT
est renvoyée lorsque roleState
vaut 0. Elle présente (fonction fetchREFS
) un formulaire permettant de choisir un nombre d'exos pour chaque thème et d'envoyer une requête sur le serveur Gunicorn-Flask. La réponse modifie roleState
qui passe à 1 et listeRefsState
qui désigne la liste de chemins.
côté Flask: route /getREFS
avec les nombres d'exercices par thème en paramètre. Renvoie une liste de références d'exercices formée aléatoirement avec les nombres d'exercices de chaque type.
Visualisation des exercices.
côté Gatsby. La fonction listeMENU
est renvoyée lorsque roleState
est >0 et présente les outils pour visualiser les exercices.
compiler les pages pdf (énoncés, corrigés) et proposer un lien de téléchargement.
roleState
vaut 1, compilBUTTON
est présenté qui permet d'appeler fetchCOMPIL
qui lance une requête POST
./getCOMPIL
reçoit la requête avec la liste des références dans son body
. Elle forme le fichier LateX que le serveur web Gunicorn présente. Elle renvoie un identifiant du fichier LateX et la valeur 2 à passer à roleState
.roleState
vaut 2, la fonction pdfANCHOR
présente un lien de téléchargement (à la place du bouton de compilation) vers le service de compilation en ligne.lire les exos dans la vue
/getLATEX
avec une référence d'énoncé ou de corrigé en paramètre. Renvoie le code Latex à passer au latexState
.latexState
avec un composant spécifique basé sur katex
.ATTENTION un mécanisme de suppression du fichier Latex sur le serveur Gunicorn est indispensable.
###2. Remarques
Le serveur Flask utilise random.sample(population, k, *, counts=None)
qui renvoie une liste extraite aléatoirement:
Les textes des exercices sont accessibles dans un projet GitHub.
Il faut actualiser les thèmes et il manque des exercices pour certains
Les exercices Ectrigus89
, Ectrigus90
, Ectrigus91
contiennent des images pdf créés avec asymptote. Je ne sais pas les compiler pour le moment. J'ai contourné le problème en les renommant _Ectrigus89
, _Ectrigus90
, _Ectrigus91
de manière à ce qu'ils ne soient jamais tirés.
Le composant basé sur katex ne fonctionne bien qu'avec les expressions mathématiques de Latex: le formatage textuel est ignoré. Il faut transformer à la main les tags LateX en tags html.
Déploiement sur Digital Ocean
Référence : How To Deploy a FlaskApp Using Gunicorn to App Platform