Pyodide-MkDocs est une solution technique permettant de créer un cours interactif à partir d'un site statique généré par MkDocs.
Il permet d'intégrer, dans le navigateur, côté client :
une console Python ;
un éditeur de code ;
un juge en ligne associé à des corrigés.
Garantie :
sans cookie
sans inscription
créé par un enseignant pour les enseignants
Solution
La technologie permettant ce tour de force s'appelle Pyodide.
Pyodide utilise WebAssembly pour faire le lien entre Python et Javascript et proposer un environnement permettant de manipuler le DOM Javascript avec Python, ou inversement de manipuler Python avec Javascript.
À la racine du projet MkDocs (dans le dossier docs/), vous devez décompresser l'archive .zip téléchargeable en cliquant ici :
Plus d'information
Cela rajoutera les éléments suivants à votre configuration :
un dossier my_theme_customizations/ ;
un template HTML my_theme_customizations/main.html ;
un fichier CSS my_theme_customizations/pyodide-mkdocs/pyoditeur.css ;
trois fichiers Javascript my_theme_customizations/pyodide-mkdocs/interpreter.js, my_theme_customizations/pyodide-mkdocs/ide.js et my_theme_customizations/pyodide-mkdocs/utils.js;
Création d'un terminal vide. L'auto-complétion avec Tab et le rappel de l'historique (avec Ctrl+R ) sont possibles.
{{ IDE() }}
Création d'un IDE vide, visuellement proche de Thonny. La zone de saisie se redimensionne automatiquement et autorise l'auto-complétion de type snippet avec Alt+Space.
{{ IDE('foo/bar/nom_de_fichier', MAX = 8, SANS = 'max,min') }}
Le fichier nom_de_fichier.py est chargée dans un IDE. Ce fichier doit être situé impérativement dans docs/scripts/foo/bar/.
MAX = 8 : indique le nombre maximal de tentatives de validation que l'élève peut effectuer. MAX = 1000 ou MAX = "+" permet de mettre ce nombre à l'infini. Valeur par défaut : MAX = 5 .
SANS = 'max,min' permet d'interdire l'utilisation des fonctions built-ins max et min.
Les IDE sont enregistrés à intervalle de temps régulier. Ils permettent également l'autocomplétion avec la combinaison de touches Alt+Space.
Tous les IDE et les terminaux partagent le même namespace. On peut donc accéder à n'importe quelle fonction créée dans n'importe quel IDE ou terminal.
C'est un comportement qui a l'avantage de pouvoir proposer des exercices où l'on construit petit à petit un code complexe mais qui fera l'objet de changement important à l'avenir.