3. Exécuteur de la commande#
Le terme « exécuteur » n’est pas très joli mais il représente la classe de base qui permet d’exécuter toutes les commandes en factorisant les tâches communes. Dans d’anciennes versions, on parlait de « superviseur » qui ajoutait une couche intermédiaire entre le fichier de commandes et la commande elle-même. Aujourd’hui, une commande est une fonction Python.
Le fichier code_aster/CodeCommands/modi_mail.py est prêt à l’emploi:
from ..Supervis import ExecuteCommand
class TransformMesh(ExecuteCommand):
"""Command that changes a :class:`~code_aster.Objects.Mesh`."""
command_name = "MODI_MAIL"
def create_result(self, keywords):
"""Initialize the result.
Arguments:
keywords (dict): Keywords arguments of user's keywords.
"""
self._result = keywords["MAILLAGE"]
def add_dependencies(self, keywords):
"""Register input *DataStructure* objects as dependencies.
Arguments:
keywords (dict): User's keywords.
"""
def post_exec(self, keywords):
"""Execute the command.
Arguments:
keywords (dict): User's keywords.
"""
self._result.build()
MODI_MAIL = TransformMesh.run
3.1. Description#
MODI_MAIL est la fonction Python de la commande. C’est la fonction exécutée dans le
fichier de commandes.
On voit qu’il s’agit de la méthode run de la classe TransformMesh qui
hérite de la classe de base est ExecuteCommand.
Ce mécanisme permet de mutualiser les tâches communes à toutes les commandes: vérification générale, mesure des temps, vérification de la syntaxe, affichage de la syntaxe, création du résultat, exécution proprement dite, traitements finaux.
Dans ce fichier, on particularise seulement le nécessaire.
command_name permet en autres d’associer automatiquement le catalogue de commande.
create_result initialise l’objet produit par la commande.
Dans notre cas, la commande modifie toujours l’objet fourni sous MAILLAGE.
La plupart du temps, on crée un nouvel objet soit vide, soit à partir des mots-clés.
Le contenu de cet objet sera complété par l’opérateur Fortran.
add_dependencies est ici surchargée et n’ajoute aucune dépendance à l’objet produit.
La méthode par défaut ajoute une dépendance vers chaque structure de données fournie
par les mots-clés.
Il faut veiller à ne pas ajouter de dépendance superflue pour ne pas encombrer la mémoire
d’objets inutiles.
L’ajout de dépendance de cette manière devrait disparaître quand tous les objets porteront
par nature (dans leur classe C++) des pointeurs vers les objets parents.
post_exec permet d’appeler des instructions après l’exécution de la partie fortran,
souvent pour compléter le contenu de l’objet C++ pour permettre l’accès depuis Python.
Pour que cette fonction MODI_MAIL soit accessible de le fichier de commandes comme
toutes les autres, elle doit être ajoutée dans code_aster/CodeCommands/__init__.py.
Ainsi quand l’utilisateur fait :
from code_aster.Commands import *
MODI_MAIL est disponible.