Skip to content

JS runtime rework + errors handling - finish line...

Frederic Zinelli a demandé de fusionner js-follow-up vers main

closes #53 (closed) (enfin!!)

  • ADD - nouveaux raccourcis: Ctrl+S=tests publiques / Ctrl+Enter`=validation

  • RM - js_md5 cdn (obsolète)

  • ADD - plus de données passées de python à JS directement via balises scripts (excluded et white_list)

  • ADD - plus de fonctionnalités sur le jsLogger, pour faciliter le développement.

  • Réorganise complètement tout le runtime touchant aux tests publiques:

    • Le fichier est maintenant lancé un un seul bloc (plus de séparation => prépare le passage aux erreur python brutes)
    • NOTA: du coup, pour le moment, le vas pas de tests trouvés n'existe plus... => à remettre?
    • Modifie la façon de gérer les exclusions de code, de façon à bloquer les fonction elles-mêmes, et non se limiter à des recherches de chaînes de caractères dans le code
    • Conséquence: ajout d'une white_list d'imports à effectuer avant de mettre en place restrictions pour le code utilisateur (pour le cas des packages qu'on veut laisser importer mais qui repose sur du code interdit d'utilisation).
    • Changement du comportement par défaut pour les exclusions: plus aucune interdiction par défaut (sinon, impossible d'importer certains modules par défaut...)
    • Amélioration de la gestion des installations de packages: micropip n'est lancé que si nécessaire
    • Nettoyage par le vide dans le code... (YEAH!!!!! XD )
    • Réécriture (quand possible) des codes python liés à la logistique pyodide, de manière à ce qu'ils "leakent" moins de choses dans le scope global (modules, variables, ...). => utilisation de fonctions, qui sont supprimées du scope après utilisation.
  • Travail sur les terminaux:

    • Légères modifications dans le css pour améliorer l'aspect général.
    • Ajout des raccourcis Ctrl+S et Ctrl+Enter dans les terminaux également, pour lancer les tests et la validation (plus utile pour le développement qu'autre chose, mais bon...)
    • Remplacement du mécanisme de synchonisation (async), qui était tout bonnement "broken". Du coup:
      • utilisation d'un seul verrou global, comment à toute la page (avant: spécifique au code lancé en lignes de commande via un terminal. Uniquement...)
      • tous les points d'entrées (actions utilisateurs) utilisent maintenant le verrou (avant, uniquement les actions dans le terminal
    • Modification du code gérant les terminaux pour utiliser les mêmes mécanismes que pour le code des éditeurs (interdictions + imports + white_list d'imports)
      • a amené une refonte en profondeur de certains outils (la callback interpreter qui a été taillée en morceaux)
      • suppression de certains éléments liés à la PyiodideConsole: le binding std_out et std_err était devenu inutile car la logistique générale (runPythonCodeWithOptions) prend tout ça en charge, déjà
      • pyFuncs est devenu global => WARNING: ça veut aussi dire que si par hasard l'utilisateur modifie ces fonctions (visibles dans le scope global), il va mettre le foutoir dans le fonctionnement et seul un rechargement de page refera marcher le tout.
  • Voir pour le cas pas de tests trouvés...? => on laisse tomber

Dernières modifs:

  • Update de pyodide an 0.25.0

  • FIX (regression) - les terminaux n'étaient plus en overflow et pouvaient déborder de leur conteneur.

  • MAJ de la partie concernant les validations

  • Réorganisation des fichiers js (encore...) avec découpage du globaslJsRuntime-libs.js

  • Encore plus de nettoyage par le vide...

  • Restauration de tous les messages d'erreur brute (avec un léger prétraitement, pour supprimer les infos spécifiques à l'environnement de pyodide)

  • Ajout d'une gestion des comportements concernant les AssertionError:

    • Une assertion qui ne passe pas et qui est écrite avec un message d'erreur affiche tjrs ce message
    • Pour les assertions qui n'ont pas de message d'erreur:
      • Pour les tests publiques : le code complet de l'assertion est récupéré et affiché dans le terminal.
      • Pour les tests privés : un argument LOGS=None|True|False (défaut=None) a été ajouté aux macros IDE.
        • LOGS=True : le code de l'assertion est toujours affiché
        • LOGS=False : le code de l'assertion n'est jamais affiché, et l'utilisateur ne voit que la stacktrace finissant par AssertionError (il a donc un pavé rouge dans le terminal, qui ne lui sert à "rien du tout"...)
        • LOGS=None : dans ce cas, le comportement utilisé dépend d'une variable globale, définie dans mkdocs.yml:extra.show_failed_assertions_on_validation = 0|1. Ceci permet de contrôler le comportement pour tous les exercices existant, si on n'a jamais renseigné l'argument LOGS dans les macros. Si la variable n'est pas renseignée, le code des assertions est affiché par défaut Actuellement, la valeur est 1 car c'est l'équivalent du comportement qu'on avait avec pyodide jusque là.
  • FIX - le problème des panneaux coullissants qui marchaient apparemment quand ils voulaient bien

    • FIX le code recherchant l'appel de macro en cours, en ajoutant ou excluant l'argument ID=xx quand nécessaire
    • Ajout de sécurités à get_indent pour lever une erreur si qqc de suspect est rencontré
  • Reconstruire des messages pour les assertions qui n'en ont pas, en extrayant l'instruction complète de l'assertion (essayer avec ast)

  • Ajouter une option globale pour désactiver cette reconstruction, pour les gens qui veulent garder ça privé. Peut-être plusieurs options, ou alors seulement concernant les validation?

    • désactiver la stdout pour la validation
Modification effectuée par Frederic Zinelli

Rapports de requête de fusion