Un mot de passe enseignant pour débloquer la suite du notebook
La fonction input de Basthon sait maintenant masquer la saisie :
mdp = input("Mot de passe : ", password=True)
Le module standard getpass en profite aussi : getpass.getpass() affiche désormais un vrai champ de mot de passe.
Combinée au notebook séquencé, cette nouveauté permet de faire valider chaque étape d'une activité par l'enseignant, qui passe dans les rangs et tape son mot de passe.

Le code de validation
Il se place dans un module _mot_de_passe.py, chargé avec le notebook :
from hashlib import sha256
from basthon.autoeval import Validate, validationclass
# Empreinte SHA-256 du mot de passe enseignant (ici "prof2026").
# Pour en générer une autre :
# import hashlib; hashlib.sha256(b"mon_mot_de_passe").hexdigest()
_EMPREINTE = "f5a135a2c751beacbda9c2cadc17debe1699e67b6634a0b5165fac37d9ad1428"
@validationclass
class ValidateEnseignant(Validate):
"""Validation d'un point d'arrêt par mot de passe enseignant."""
def __call__(self):
mdp = input("Mot de passe enseignant : ", password=True)
if sha256(mdp.encode()).hexdigest() == _EMPREINTE:
print("✅ Travail validé par l'enseignant, tu peux continuer !")
return True
print("❌ Mot de passe incorrect : appelle ton enseignant.")
return False
def continuer():
"""À appeler dans chaque cellule taguée « breakpoint »."""
ValidateEnseignant(label="validation-enseignant")()
Il ne reste plus qu'à importer continuer (from _mot_de_passe import continuer) et à l'appeler dans chaque cellule taguée breakpoint du notebook séquencé : tant que le mot de passe n'a pas été saisi, les cellules suivantes restent verrouillées.
Deux remarques sur ce code :
- le mot de passe n'apparaît nulle part : seule son empreinte SHA-256 est stockée, un élève curieux qui ouvrirait
_mot_de_passe.pyne pourrait pas le retrouver ; - un nouvel objet de validation à chaque étape : une instance de
Validatene peut être validée qu'une seule fois. C'est pour cela quecontinuer()en crée une nouvelle à chaque appel, ce qui permet de réutiliser le même mot de passe pour toutes les étapes.