Aller au contenu

IDEs - Guide rapide

un IDE

But de cette page

Voici une procédure minimale pour utiliser un IDE ou un terminal reposant sur des fichiers python dans une page de la documentation.

Cette page décrit les éléments nécessaire pour les IDEs, mais la procédure est la même pour les terminaux, à quelques détails près.

La page discutant en détail des IDEs, décrit l'intégralité des fonctionnalités disponibles, ainsi que les organisations alternatives des fichiers.

Anciens formats de fichiers utilisés dans pyodide-mkdocs

Les informations données ci-dessous correspondent au mode de travail qu'il serait préférable d'adopter, mais les IDEs restent rétrocompatibles avec les fichiers de pyodide-mkdocs qui utilisait notamment 3 types de fichiers pythons différents ({exo}.py, {exo}_corr.py et {exo}_test.py).

Voir la page de mise à jour depuis pyodide-mkdocs vers le thème pour connaître les changements nécessaires lors de la mise à jour.



Exemple#

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013ecqb)F_t% hwkfdvymgp2la9uoén/(R=rPèS35;1is4:.050p0b0i0x0P0w0Q0k0c0w0x0Q0Q0G010i0P0u010406050Q0z0s0s0x0H0r040K0A0w0z0.0A0C050D0^0`0|0~0?0u04051e171h0D1e0?0p0P0q0$0(0*0,0l0P0t0l0w1v0l0i0;050X0e0w0b1q0)0+011u1w1y1w0i1E1G1C0i0H1f0i0l0$110Q0u0x0C0,0v011I1s010o0Z0b0C0x0s0b1C1#1%1,1K1/1G1=1@0;0a0k0I0H0A0u0A0Q0P140C0k0V1Z0H0H0b0c2c171`0C1f0D1X2p1U1W1V1D0p1|0,1y0C1;291C1n1p0%1J2z0P2B0C0A2F1C0u2i1f2n2p2T0@1$2d2H1-2M0H0{0w0;0O2m2X0=2W1{2Z1K2#2%0;0v2+1%2-2n2y012=0x2(040L2_2o0?2|2:0,2 310R342{2X2}3a0;0M3d1i2R172F2s0p1W2x38010c2N1^1f3o1g3m2V182,053v0V2S3f3t0n0;0V0o3d0k2.2Y1r2;0o0;0b0Q0i0h1$0P0H3k373T0,0:040E3(3J3*2~0;163D2`3R2}3,0f0S3d060k413Q3)2I013L042i0i0z0H3@2T433:450A0m3?0A0i3P3`3t0C3?3/2/3;0A0;0j4s3S450s0P2@3 364g2!0;0o0Y0w4n441-4v040G4M4G1K0n0c0;0g300Q0b3P424o3;0c0O0;030k0F2j0l0|0t0b0H0k0(0k1$4?0k0W1Z0w1G4^0c1H3G1H0p1%0#0w02030L0y0N0B1n0i0b4b4{0A5l0q0A3$3 425t5u5t4(454*4,0$1H0d0z5c5e0N0Z0k4!4{1J5C0z1%2x1G0#5j3Y0#1$0*1;0i0k0x0q2j5J0z0c0c0J0Q0T5.3 17562p2Q0b2p3z2q3q172t5}0x1F5^3n1o2-0D0V0X0Z0Q04.

Interface & fonctionnalités#

Une description rapide du fonctionnement des IDEs et de leurs fonctionnalités est donnée dans la page d'aide pour les utilisateurs.


Organisation des fichiers #

Pour pouvoir insérer un IDE dans le fichier docs/exercices/est_pair/index.md, l'approche la plus simple est d'organiser les fichiers comme suit :

    ├── docs
    │   ├── exercices
    │   │   ├── est_pair
    │   │   │   ├── index.md
    │   │   │   ├── exo.py
    │   │   │   ├── exo_REM.md
    │   │   │   └── exo_VIS_REM.md

(Nota: certains fichiers sont optionnels / toute autre hiérarchie est envisageable, seul le contenu du dossier est_pair importe, dans cet exemple)


Fichier RĂ´le
index.md Contient l'énoncé de l'exercice et accueil l'IDE.
Vous pouvez utiliser un autre nom de fichier si vous voulez.
{exo}.py Contient les différents codes python nécessaires pour l'IDE.
Nom de fichier Ă  choisir par vos soins.
{exo}_REM.md
(optionnel)
Remarques qui seront affichées avec la correction, dans une admonition repliée, lorsque la solution sera révélée.
  • Le dĂ©but du nom doit correspondre au fichier python (sans extension).
  • Le fichier REM ne doit pas contenir d'appels de macros.
{exo}_VIS_REM.md
(optionnel)
Remarques qui seront affichées après la correction et le fichier REM, en dehors de l'admonition (et donc visibles tout de suite, une fois la solution révélée).
  • Le dĂ©but du nom doit correspondre au fichier python (sans extension).
  • Le fichier VIS_REM ne doit pas contenir d'appels de macros.

Les anciennes organisations des fichiers sont toujours utilisables. Voir à ce sujet la section détaillée concernant les IDEs.

Le fichier index.md#

Placez-y l'énoncé de l'exercice et toutes les informations que vous jugerez utiles, sous forme de syntaxe markdown compatibles avec les extensions et plugins renseignés dans le fichier mkdocs.yml.

Les IDEs y sont ajoutés avec l'appel de la macro IDE, en lui fournissant le nom du fichier python (sans extension) :

[...énoncé, avec tout le markdown qui vous fait envie...]

{{ IDE('exo') }}

Tip

Il existe d'autres façons d'organiser les codes python, en utilisant des fichiers séparés (organisation obsolète, utilisée pour pyodide-mkdocs). Voir la page des détails des IDEs.

Le fichier exo.py#

Contenu#

La structure classique du fichier est celle ci-dessous.

Il est également possible d'afficher ce contenu dans un terminal ou de créer un fichier avec ce contenu en utilisant un des scripts du thème :

python -m pyodide_mkdocs_theme --py
python -m pyodide_mkdocs_theme --py --file "path/exo.py"


Voici donc un exemple de contenu pour un fichier python associé à un IDE :

Modèle de base pour le fichier python
# --- PYODIDE:ignore --- #
"""
Les sections `ignore` sont... ignorées. Vous pouvez les utiliser pour laisser
des commentaires dans vos fichiers, ou y archiver du code python qui ne sera
pas utilisé pour le site construit.
---------------------------------------------------------------------------

La section `env` (ci-dessous) est exécutée avant le code utilisateur.
Son contenu n'est pas visible de l'utilisateur mais tout ce qui y est défini
est ensuite disponible dans l'environnement.
Si le code de la section ENV lève une erreur, rien d'autre ne sera exécuté.
"""
# --- PYODIDE:env --- #

class Stack:
    """ (Interface à décrire dans l'énoncé) """
    def __init__(self): self.__stk=[]
    def push(self, v): self.__stk.append(v)
    def pop(self): return self.__stk.pop()
    def is_empty(self): return not self.__stk



# --- PYODIDE:ignore --- #
"""
La section `code` est l'Ă©tat initial du code fourni Ă  l'utilisateur dans
l'Ă©diteur, Ă  l'exclusion des tests publics (voir section `tests`).
"""
# --- PYODIDE:code --- #

def est_pair(n):
    ...



# --- PYODIDE:ignore --- #
"""
La section `corr` contient le code qui sera affiché dans la correction, sous l'IDE.
"""
# --- PYODIDE:corr --- #

def est_pair(n):
    return not n%2



# --- PYODIDE:ignore --- #
"""
La section `tests` contient les tests publics qui seront affichés sous le code
utilisateur, dans l'Ă©diteur.
"""
# --- PYODIDE:tests --- #

assert est_pair(3) is False
assert est_pair(24) is True



# --- PYODIDE:ignore --- #
"""
La section `secrets` contient les tests secrets pour les validations. Ces tests ne sont
pas visibles par l'utilisateur.

ATTENTION :
    Il est impératif d'utiliser des messages dans les assertions des tests secrets,
    sinon l'utilisateur ne peut pas déboguer son code car `print` est désactivé
    durant ces tests ! (sauf si... => Voir les options de configuration)
    À vous de choisir le niveau d'information que vous voulez fournir dans le message.

Par ailleurs, il est conseillé d'utiliser une fonction pour éviter que des variables
des tests ne se retrouvent dans l'environnement global.
"""
# --- PYODIDE:secrets --- #

def tests():
    for n in range(100):
        val = est_pair(n)
        exp = n%2 == 0

        msg = f"est_pair({n})"                           # Minimum vital
        msg = f"est_pair({n}): valeur renvoyée {val}"    # Conseillé
        msg = f"est_pair({n}): {val} devrait ĂŞtre {exp}" # La totale

        assert val == exp, msg

tests()         # Ne pas oublier d'appeler la fonction de tests... ! x)
del tests       # Si vous ne voulez pas laisser de traces...


# --- PYODIDE:post --- #
# La section post contient du code de "nettoyage", à appliquer systématiquement
# après que le code et les tests aient été lancés.
# Ce contenu est exécuté même si une erreur a été levée précédemment, SAUF si
# cette erreur provient de la section ENV.

Validité#

Toutes les sections sont optionnelles, mais pour être considéré valide, un fichier python doit respecter les règles suivantes :

  • Les noms des sections doivent ĂŞtre ceux dĂ©crits dans le tableau en haut de cette page. Tout autre nom lèvera une erreur.
  • Chaque section ne peut ĂŞtre dĂ©clarĂ©e qu'une fois (sauf la section ignore, qui peut ĂŞtre rĂ©utilisĂ©e autant de fois que nĂ©cessaire).
  • Quand une section est dĂ©finie, elle ne peut pas ĂŞtre vide. Si vous ne souhaitez pas utiliser une section, supprimez son contenu ainsi que le commentaire annonçant cette section, ou bien ajoutez un commentaire dans la section en question.
  • L'ordre des sections dans le fichier n'a techniquement aucune importance pour les exĂ©cution dans Pyodide.
  • Selon la configuration de la section ides du plugin pyodide_macros, des contraintes peuvent ĂŞtre imposĂ©es ou non sur l'existence de certaines sections ou fichiers par rapport Ă  d'autres.

    Si toutes les options sont laissées par défaut, une erreur est levée dans les cas suivants :

    Présence
    secrets
    Présence
    corr ou REMarques
    IDE(..., MAX=...) Option de configuration correspondant
    / ides.forbid_secrets_without_corr_or_REMs
    / ides.forbid_hidden_corr_and_REMs_without_secrets
    \(\infty\) ides.forbid_corr_and_REMs_with_infinite_attempts

Les fichiers REM.md et VIS_REM.md #

VIS_REM - exemple

Ces fichiers sont spécifiques aux IDEs. La seule contrainte particulière les concernant est qu'ils ne doivent pas contenir d'appels de macros ni de graphes mermaid. Il est par contre possible d'y utiliser des syntaxes Latex.

Lorsque l'utilisateur passe tous les tests ou consomme tous les essais disponibles, le contenu du fichier REM est affiché dans une admonition repliée (contenant également le code de la correction quand elle existe).

Le contenu de VIS_REM est quant à lui affiché au mêmes moments mais en-dessous de l'admonition repliée, de manière à ce que son contenu soit tout de suite visible par l'utilisateur.
L'admonition de la partie "VIS_REM" dans l'image ci-contre n'est pas ajoutée automatiquement : elle est définie dans le fichier VIS_REM lui-même.




... Et c'est tout !