Aller au contenu

Configuration

Le plugin pyodide_macros vient avec le thème et permet de configurer les comportements de celui-ci.

Architecture globale#

Le plugin pyodide_macros peut être configuré via le fichier mkdocs.yml, les options disponibles étant les suivantes :


plugins:
    - pyodide_macros:
        args:
            IDE:
                SANS: ""
                WHITE: ""
                REC_LIMIT: -1
                MERMAID: false
                AUTO_RUN: false
                MAX: 5
                LOGS: true
                MODE: null
                MIN_SIZE: 3
                MAX_SIZE: 30
                TERM_H: 10
                TEST: ""
                TWO_COLS: false
                STD_KEY: ""
                EXPORT: false

            terminal:
                SANS: ""
                WHITE: ""
                REC_LIMIT: -1
                MERMAID: false
                AUTO_RUN: false
                TERM_H: 10
                FILL: ""

            py_btn:
                SANS: ""
                WHITE: ""
                REC_LIMIT: -1
                ICON: ""
                HEIGHT: null
                WIDTH: null
                SIZE: null
                TIP: "Exécuter le code"
                TIP_SHIFT: 50
                TIP_WIDTH: 0.0
                WRAPPER: "div"
                MERMAID: false
                AUTO_RUN: false

            run:
                SANS: ""
                WHITE: ""
                REC_LIMIT: -1
                MERMAID: false

            multi_qcm:
                description: ""
                hide: false
                multi: false
                shuffle: false
                shuffle_questions: false
                shuffle_items: false
                admo_kind: "!!!"
                admo_class: "tip"
                qcm_title: "Question"
                tag_list_of_qs: null
                DEBUG: false

            figure:
                div_id: "figure1"
                div_class: "py_mk_figure"
                inner_text: "Votre tracé sera ici"
                admo_kind: "!!!"
                admo_class: "tip"
                admo_title: "Votre figure"
                p5_buttons: null

        build:
            deprecation_level: "error"
            encrypted_js_data: true
            forbid_macros_override: true
            ignore_macros_plugin_diffs: false
            limit_pypi_install_to: null
            load_yaml_encoding: "utf-8"
            macros_with_indents: []
            meta_yaml_allow_extras: false
            meta_yaml_encoding: "utf-8"
            python_libs: ["py_libs"]
            skip_py_md_paths_names_validation: false
            tab_to_spaces: -1

        ides:
            ace_style_dark: "tomorrow_night_bright"
            ace_style_light: "crimson_editor"
            deactivate_stdout_for_secrets: true
            decrease_attempts_on_user_code_failure: "editor"
            editor_font_family: "monospace"
            editor_font_size: 15
            encrypt_alpha_mode: "direct"
            encrypt_corrections_and_rems: true
            export_zip_prefix: ""
            export_zip_with_names: false
            forbid_corr_and_REMs_with_infinite_attempts: true
            forbid_hidden_corr_and_REMs_without_secrets: true
            forbid_secrets_without_corr_or_REMs: true
            show_only_assertion_errors_for_secrets: false

        qcms:
            forbid_no_correct_answers_with_multi: true

        terms:
            cut_feedback: true
            stdout_cut_off: 200

        testing:
            empty_section_fallback: "skip"
            include: "null"
            load_buttons: null
            page: "test_ides"

        force_render_paths: ""
        include_dir: ""
        include_yaml: []
        j2_block_end_string: ""
        j2_block_start_string: ""
        j2_comment_end_string: ""
        j2_comment_start_string: ""
        j2_variable_end_string: ""
        j2_variable_start_string: ""
        module_name: "main"
        modules: []
        on_error_fail: false
        on_undefined: "keep"
        render_by_default: true
        verbose: false

DĂ©tails#


args#

Classe : ArgsConfig | Étend : CopyableConfig, Config

Réglages des arguments par défaut accessibles pour les différentes macros du thème. Explications détaillées dans la page Aide rédacteurs/Résumé.




build#

Classe : BuildConfig | Étend : CopyableConfig, Config

Réglages concernant la construction de la documentation ou qui impactent la façon dont le contenu des pages est construit.


Options disponibles Valeur par défaut
deprecation_level "error"
encrypted_js_data true
forbid_macros_override true
ignore_macros_plugin_diffs false
limit_pypi_install_to null
load_yaml_encoding "utf-8"
macros_with_indents []
meta_yaml_allow_extras false
meta_yaml_encoding "utf-8"
python_libs ["py_libs"]
skip_py_md_paths_names_validation false
tab_to_spaces -1


deprecation_level = C.Choice(('error', 'warn'), default='error')#

Comportement utilisé lors d'un build/serve lorsqu'une option obsolète est utilisée.

encrypted_js_data = C.Type(bool, default=True)#

Si True, les données de configuration des IDEs, terminaux et py_btns sont encodées. Si des problèmes de décompression des données sont rencontrés, cette option peut être désactivée.

forbid_macros_override = C.Type(bool, default=True)#

Si True, PyodideMacrosError est levée lorsque deux macros du même nom sont enregistrées par le plugin.

ignore_macros_plugin_diffs = C.Type(bool, default=False)#

Passer à True pour éviter la vérification de compatibilité de la configuration du plugin PyodideMacroPlugin avec celle du plugin original des macros, MacrosPlugin.

Raisons de cette vérification

Le plugin du thème hérite de celui de la bibliothèque mkdocs-macros-plugin, PyodideMacros.

Or, la configuration du plugin MacrosPlugin est faite "à l'ancienne", avec config_scheme, alors que celle de PyodideMacroPlugin utilise les classes Config disponibles à partir de mkdocs 1.5+. Les deux étant incompatibles, cela à imposé de reporter en dur la configuration du plugin d'origine dans celle du thème. Ceci fait qu'une modification de la configuration du plugin d'origine pourrait rendre celle du thème inopérante et ceci sans préavis.

Cette vérification permet donc d'assurer que le comportement des objets MacrosPlugin sera celui attendu. Si une différence est constatée entre les deux configurations, le build est donc avorté car il n'y a aucune garantie que le site construit puisse encore être correct.

Si les modifications de MacrosPlugin sont mineures, il est possible qu'un build puisse tout de même fonctionner, et passer cette option à True permettra donc de faire l'essai. À tenter à vos risques et périls...

limit_pypi_install_to = C.Optional(C.ListOfItems(C.Type(str)))#

Si cette liste est définie, seules les imports dont le nom de bibliothèque figure dans cette liste seront autorisés à déclencher une installation automatique depuis PyPI. Noter que :

  • C'est le nom de l'import dans le code python qui doit ĂŞtre renseignĂ© (ex : PIL pour interdire l'installation de pillow).
  • Utiliser [] interdit toutes les installations automatiques depuis PyPI.
  • Mettre cette option Ă  null (valeur par dĂ©faut) autorise toutes les requĂŞtes vers PyPI.

load_yaml_encoding = C.Type(str, default='utf-8')#

Encodage à utiliser lors du chargement de données YAML avec les fonctionnalités originales de MacrosPlugin :

La méthode d'origine n'utilise aucun argument d'encodage, ce qui peut entraîner des comportements différents entre Windows et Linux (typiquement : lors de l'exécution d'un pipeline sur la forge EN par rapport au travail local sous Windows).

macros_with_indents = C.ListOfItems(C.Type(str), default=[])#

Permet d'enregistrer des macros personnalisées (liste de chaînes de caractères), qui insèrent du contenu markdown multilignes, pour pouvoir indenter correctement le contenu dans la page :

Une fois qu'une macro est enregistrée dans cette liste, elle peut appeler la méthode env.indent_macro(markdown) durant son exécution pour que le contenu généré soit indenté correctement par le plugin.

meta_yaml_allow_extras = C.Type(bool, default=False)#

Définit s'il est possible d'ajouter dans les fichiers .meta.pmt.yml des données autres que celles relatives au plugin lui-même.

Lorsque cette valeur est à false, seules des options du plugin pyodide_macros sont autorisées, ce qui permet de valider l'intégralité du contenu du fichier, mais empêche par exemple de définir des variables pour les macros dans ces fichiers.
Si la valeur est à true, il est alors possible d'ajouter d'autres variables, mais les fautes de frappes dans les premiers niveaux ne peuvent plus être identifiées (exemple : temrs.cut_feedback au lieu de terms.cut_feedback).

meta_yaml_encoding = C.Type(str, default='utf-8')#

Encodage utilisé pour charger les fichiers .meta.pmt.yml.

python_libs = C.ListOfItems(C.Type(str), default=['py_libs'])#

Liste de répertoires de bibliothèques python qui doivent être importables dans Pyodide.

Une erreur est levée si :

  • Le nom donnĂ© ne correspond pas Ă  un rĂ©pertoire existant (sauf s'il s'agit de la valeur par dĂ©faut, "py_libs").
  • Le rĂ©pertoire n'est pas situĂ© Ă  la racine du projet.
  • Le rĂ©pertoire n'est pas une bibliothèque Python (c'est-Ă -dire qu'il ne contient pas de fichier __init__.py).

skip_py_md_paths_names_validation = C.Type(bool, default=False)#

Par défaut, les noms de chemin de tous les fichiers .py et .md présents dans le docs_dir sont vérifiés pour s'assurer qu'ils ne contiennent aucun caractère autre que des lettres, des chiffres, des points ou des tirets. Cela garantit le bon fonctionnement des macros liées aux IDEs.

Si des caractères indésirables sont détectés, une erreur de type BuildError est levée. Cependant, cette vérification peut être désactivée en assignant True à ce paramètre. ... À Utiliser à vos risques et périls.

tab_to_spaces = C.Type(int, default=-1)#

Si cette option est définie avec une valeur positive (ou nulle), les tabulations trouvées avant un appel à une macro multiligne (voir l'option macros_with_indent) seront automatiquement converties en utilisant ce nombre d'espaces.

Aucune garantie n'est alors donnée quant à la correction du résultat.
Si une conversion est effectuée, un avertissement sera affiché dans la console pour faciliter la localisation et la modification des appels de macros responsables du warning.

Éviter les caractères de tabulation dans la documentation

Régler votre éditeur de code de manière à ce qu'il remplace automatiquement les tabulations par des espaces.

Les caractères de tabulation ne sont pas toujours interprétés de la même façon selon le contexte d'utilisation du fichier, tandis que les fichiers markdown reposent en bonne partie sur les indentations pour définir la mise en page des rendus.
Les tabulations sont donc Ă  proscrire.




ides#

Classe : IdesConfig | Étend : CopyableConfig, Config

Réglages spécifiques aux IDEs (comportements impactant l'utilisateur et les exécutions).


Options disponibles Valeur par défaut
ace_style_dark "tomorrow_night_bright"
ace_style_light "crimson_editor"
deactivate_stdout_for_secrets true
decrease_attempts_on_user_code_failure "editor"
editor_font_family "monospace"
editor_font_size 15
encrypt_alpha_mode "direct"
encrypt_corrections_and_rems true
export_zip_prefix ""
export_zip_with_names false
forbid_corr_and_REMs_with_infinite_attempts true
forbid_hidden_corr_and_REMs_without_secrets true
forbid_secrets_without_corr_or_REMs true
show_only_assertion_errors_for_secrets false


ace_style_dark = C.Type(str, default='tomorrow_night_bright')#

Thème de couleur utilisé pour les éditeurs des IDEs en mode sombre (liste des thèmes disponibles: utiliser le noms des fichiers js sans l'extension).
Ce réglage est écrasé par l'ancienne façon de modifier le thème, en définissant extra.ace_style.slate dans le fichier mkdocs.yml. )}}

ace_style_light = C.Type(str, default='crimson_editor')#

Thème de couleur utilisé pour les éditeurs des IDEs en mode clair (liste des thèmes disponibles: utiliser le noms des fichiers js sans l'extension).
Ce réglage est écrasé par l'ancienne façon de modifier le thème, en définissant extra.ace_style.default dans le fichier mkdocs.yml.

deactivate_stdout_for_secrets = C.Type(bool, default=True)#

DĂ©termine si la sortie standard (stdout) sera visible dans les terminaux lors des tests secrets ou non.

decrease_attempts_on_user_code_failure = C.Choice(('editor', 'public', 'secrets', True, False), default='editor')#

Les validations sont grossièrement constituées de 4 étapes, exécutant les éléments suivants :

  1. La section env, qui ne devrait pas lever d'erreur sauf AssertionError.
  2. Le contenu de l'Ă©diteur (y compris l'Ă©tat actuel des tests publics).
  3. La section tests du fichier python, assurant que la version originale des tests publics est toujours exécutée.
  4. La section secrets du fichier python.

Les exécutions étant stoppées à la première erreur rencontrée, cette option définit à partir de quelle étape une erreur doit consommer un essai :

  1. "editor" : Une erreur levée lors de l'exécution de la section env ou du contenu de l'éditeur sera comptée comme un essai consommé.
  2. "public" : seules les erreurs levées depuis les étapes 3 et 4 décompteront un essai.
  3. "secrets" : seules les erreurs levées depuis la section secrets décompteront un essai.

Par défaut, "editor" est utilisé, ce qui veut dire que n'importe quelle erreur provoquée par le code de l'éditeur de l'IDE consommera un essai (même une erreur de syntaxe).

Attention aux conditions d'accessibilité des corrections et remarques

  • Utiliser une valeur autre que "editor" implique qu'un utilisateur qui n'arriverait pas Ă  rĂ©soudre des problèmes de syntaxe dans le code ne pourra jamais accĂ©der Ă  la correction.

  • Avec "public", il suffit Ă  un utilisateur de dĂ©sactiver les tests ou mĂŞme de supprimer tout le contenu de l'Ă©diteur pour pouvoir faire dĂ©croĂ®tre le compteur d'essais Ă  volontĂ©.

  • Avec "secrets", le compteur d'essais ne peut dĂ©croĂ®tre que si le code ne contient pas d'erreurs de syntaxe et passe les tests publics (ce qui est faisable en hard-codant les rĂ©ponses des tests publics).

Options booléennes

Les valeurs booléennes sont là uniquement pour la rétrocompatibilité et un warning apparaîtra dans la console si elles sont utilisées.

  • True correspond Ă  "editor"
  • False correspond Ă  "secrets"

editor_font_family = C.Type(str, default='monospace')#

Police de caractère à utiliser pour les éditeurs des IDEs.

editor_font_size = C.Type(int, default=15)#

Taille de la police de caractère les éditeurs des IDEs.

encrypt_alpha_mode = C.Choice(('direct', 'shuffle', 'sort'), default='direct')#

Les contenus (codes, corrections & remarques) sont transmis de mkdocs aux pages html en utilisant des données compressées. L'encodage est réalisé avec l'algorithme LZW, et cette option contrôle la manière dont l'alphabet/la table initiale est construit à partir du contenu à encoder :

  • "direct" : l'alphabet utilise les symboles dans l'ordre oĂą ils sont trouvĂ©s dans le contenu Ă  compresser (utilisĂ© par dĂ©faut).
  • "shuffle" : l'alphabet est mĂ©langĂ© alĂ©atoirement.
  • "sort" : les symboles sont triĂ©s dans l'ordre naturel.

encrypt_corrections_and_rems = C.Type(bool, default=True)#

Si activé, le contenu de la div HTML de la correction et des remarques, sous les IDEs, sera compressé lors de la construction du site.

Désactiver ceci peut être utile durant le développement, mais cette option doit toujours être activée pour le site déployé, sans quoi la barre de recherche pourraient suggérer le contenu des corrections et des remarques à l'utilisateur.

export_zip_prefix = C.Type(str, default='')#

Préfixe ajouté au début du nom des archives zip créées avec les contenus des éditeurs des IDEs configurés comme exportable (argument EXPORT=True). Si export_zip_prefix n'est pas une chaîne vide, un trait d'union sera ajouté automatiquement entre le préfixe et le reste du nom de l'archive.

export_zip_with_names = C.Type(bool, default=False)#

Si True, au moment où un utilisateur demandera de créer l'archive zip avec tous les codes des IDEs de la page, une fenêtre s'ouvrira lui demandant d'indiquer son nom. Une fois le nom renseigné, il sera ajouté entre l'éventuel préfixe (voir export_zip_prefix) et le nom normal de l'archive zip, entouré par des traits d'union.

forbid_corr_and_REMs_with_infinite_attempts = C.Type(bool, default=True)#

Lors de la construction des IDEs, si une section corr, un fichier REM ou VIS_REM existent et que le nombre de tentatives est illimité, ce contenu ne sera jamais accessible à l'utilisateur, sauf s'il réussit les tests.

Par défaut, cette situation est considérée comme invalide et BuildError sera levée. Si ce comportement est souhaité, passer cette option à False.

forbid_hidden_corr_and_REMs_without_secrets = C.Type(bool, default=True)#

Lors de la construction des IDEs, le bouton de validation n'apparaît que si une section secrets existe.
Si des sections corr ou des fichiers REM existent alors qu'aucune section secrets n'est présente, leur contenu ne sera jamais disponible pour l'utilisateur en raison de l'absence de bouton de validation dans l'interface.

Par défaut, cette situation est considérée comme invalide et BuildError sera levée. Si ce comportement est souhaité, passer cette option à False.

forbid_secrets_without_corr_or_REMs = C.Type(bool, default=True)#

Par défaut, cette situation est considérée comme invalide et BuildError sera levée. Si ce comportement est souhaité, passer cette option à False.

show_only_assertion_errors_for_secrets = C.Type(bool, default=False)#

Si activé (True), la stacktrace des messages d'erreur sera supprimée et seuls les messages des assertions resteront inchangées lorsqu'une erreur sera levée pendant les tests secrets.

AssertionError Pour les autres erreurs
Option Ă  false
AssertionError: message normal
Option Ă  false
Autres erreurs: message normal
AssertionError: sans stacktrace
Option Ă  true
Autres erreurs sans stacktrace ni message
Option Ă  true




qcms#

Classe : QcmsConfig | Étend : CopyableConfig, Config

Réglages spécifiques aux QCMs.


Options disponibles Valeur par défaut
forbid_no_correct_answers_with_multi true


forbid_no_correct_answers_with_multi = C.Type(bool, default=True)#

Si désactivé (False), une question sans réponse correcte fournie, mais marquée comme multi=True, est considérée comme valide. Si cette option est réglée à True, cette situation lèvera une erreur.




terms#

Classe : TermsConfig | Étend : CopyableConfig, Config

Réglages spécifiques aux terminaux.


Options disponibles Valeur par défaut
cut_feedback true
stdout_cut_off 200


cut_feedback = C.Type(bool, default=True)#

Si activé (True), les entrées affichées dans les terminaux sont tronquées si elles sont trop longues, afin d'éviter des problèmes de performances d'affichage des outils jQuery.terminal.

stdout_cut_off = C.Type(int, default=200)#

Nombre maximal de lignes restant affichées dans un terminal : si de nouvelles lignes sont ajoutées, les plus anciennes sont éliminées au fur et à mesure.

Performances d'affichage des terminaux

Les éléments jQuery.terminal deviennent horriblement lents lorsque le nombre de caractères affichés est important.

Cette option permet de limiter ces problèmes de performance lorsque la sortie standard n'est pas tronquée (voir le bouton en haut à droite du terminal).

Noter par contre que cette option ne limite pas le nombre de caractères dans une seule ligne, ce qui veut dire qu'une page figée est toujours possible, tandis que l'option de troncature, cut_feedback évitera ce problème aussi.




testing#

Classe : TestingConfig | Étend : CopyableConfig, Config

Permet de paramétrer la page pour tester automatiquement tous les IDEs de la documentation.


Options disponibles Valeur par défaut
empty_section_fallback "skip"
include "null"
load_buttons null
page "test_ides"


empty_section_fallback = C.Choice(('', 'skip', 'fail', 'code', 'human', 'no_clear'), default='skip')#

Lorsque la page des tests des IDEs est construite et que la section à tester pour un IDE donné ne contient pas de code et que empty_section_fallback est définie, c'est cette "stratégie" qui sera utilisée à la place.

include = C.Choice(('null', 'serve', 'site'), default='null')#

Définit si la page de tests des IDEs doit être générée et de quelle façon.

  • 'null' : la page de tests n'est pas gĂ©nĂ©rĂ©e.
  • 'serve' : la page de tests est gĂ©nĂ©rĂ©e pendant mkdocs serve, et est ajoutĂ©e automatiquement Ă  la navigation.
  • 'site' : la page de tests est ajoutĂ©e sur le site construit, mais n'apparaĂ®t pas dans la navigation.

load_buttons = C.Optional(C.Type(bool))#

Définit si le bouton pour charger l'ensemble des codes associés à un IDE de la page des tests sera présent ou non.
Le comportement par défaut dépend de la valeur de l'option testing.include :

  • Pour testing.include: serve, le bouton est prĂ©sent par dĂ©faut.
  • Pour testing.include: site, le bouton est absent par dĂ©faut.

page = C.Type(str, default='test_ides')#

Nom de fichier markdown (avec ou sans l'extension .md) utilisé pour générer une page contenant le nécessaire pour tester de manière semi-automatisée tous les IDEs de la documentation.

  • La page n'est crĂ©Ă©e que si l'option testing.include n'est pas Ă  null.
  • Une erreur est levĂ©e si un fichier du mĂŞme nom existe dĂ©jĂ .
  • Une erreur est levĂ©e si le fichier n'est pas Ă  la racine de la documentation.





pyodide_macros#

Classe : PyodideMacroConfig | Étend : CopyableConfig, Config

La configuration du plugin, PyodideMacrosConfig, reprend également toutes les options du plugin original MacrosPlugin, ce qui permet d'en réutiliser toutes les fonctionnalités.
Ces options, décrites succinctement ci-dessous, sont disponibles à la racine de la configuration du plugin, dans mkdocs.yml:plugins.pyodide_macros (voir en haut de cette page).

Pour plus d'informations Ă  leur sujet ou concernant le fonctionnement general des macros :

force_render_paths = C.Type(str, default='')#

Force le rendu des fichiers et dossiers indiqués (utilise des syntaxes Pathspec ).

include_dir = C.Type(str, default='')#

RĂ©pertoire de fichiers externes Ă  inclure.

include_yaml = C.ListOfItems(C.Type(str), default=[])#

Pour inclure des fichiers de données externes.

j2_block_end_string = C.Type(str, default='')#

Pour changer la syntaxe des fermetures de blocs Jinja2 (défaut: %}).

j2_block_start_string = C.Type(str, default='')#

Pour changer la syntaxe des ouvertures de blocs Jinja2 (défaut: {%).

j2_comment_end_string = C.Type(str, default='')#

Pour changer la syntaxe des fermetures de commentaires Jinja2 (défaut: #}).

j2_comment_start_string = C.Type(str, default='')#

Pour changer la syntaxe des ouvertures de commentaires Jinja2 (défaut: {#).

j2_variable_end_string = C.Type(str, default='')#

Pour changer la syntaxe des fermetures de variables Jinja2 (défaut: }}).

j2_variable_start_string = C.Type(str, default='')#

Pour changer la syntaxe des ouvertures de variables Jinja2 (défaut: {{).

module_name = C.Type(str, default='main')#

Nom du module/package python contenant vos macros personnalisées, filtres et variables. Utiliser un nom de fichier (sans extension), un nom de dossier, ou un chemin relatif (dossiers séparés par des slashes : dossier/module).

modules = C.ListOfItems(C.Type(str), default=[])#

Liste de pluglets à ajouter aux macros (= modules de macros qui peuvent être installés puis listés avec pip list).

on_error_fail = C.Type(bool, default=False)#

Interrompt le build si une erreur est levée durant l'exécution d'une macro.

on_undefined = C.Type(str, default='keep')#

Comportement à adopter quand une macro rencontre une variable non définie lors des rendus. Par défaut, les expressions Jinja ne sont alors pas modifiées dans la page markdown. Utiliser 'strict' pour provoquer une erreur.

render_by_default = C.Type(bool, default=True)#

Exécute les macros dans toutes les pages ou non.

verbose = C.Type(bool, default=False)#

Affiche plus d'informations dans le terminal sur les étapes de rendu des macros si passé à True lors d'un build/serve.