Aller au contenu

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.

Jouer avec !

Validation par mot de passe enseignant

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.py ne pourrait pas le retrouver ;
  • un nouvel objet de validation à chaque étape : une instance de Validate ne peut être validée qu'une seule fois. C'est pour cela que continuer() en crée une nouvelle à chaque appel, ce qui permet de réutiliser le même mot de passe pour toutes les étapes.