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 depillow
). - 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 :
- La section
env
, qui ne devrait pas lever d'erreur saufAssertionError
. - Le contenu de l'Ă©diteur (y compris l'Ă©tat actuel des tests publics).
- La section
tests
du fichier python, assurant que la version originale des tests publics est toujours exécutée. - 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 :
"editor"
: Une erreur levée lors de l'exécution de la sectionenv
ou du contenu de l'éditeur sera comptée comme un essai consommé."public"
: seules les erreurs levées depuis les étapes 3 et 4 décompteront un essai."secrets"
: seules les erreurs levées depuis la sectionsecrets
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 |
Option Ă false |
Option Ă true |
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 pendantmkdocs 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.