Files
Forge-Engine/screens/labels/data_operations.py
T
williamandClaude Sonnet 5 7476ed229e
Build and deploy / test-python (push) Successful in 1m26s
Build and deploy / test-js (push) Successful in 6s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Phase 2 : hasard + opérations mathématiques
screens/labels/data_operations.py : 6 nouvelles opérations pour
"Modifier une donnée"/"Modifier une variable" — multiplier, diviser,
modulo (garde-fou division par zéro : valeur inchangée plutôt qu'une
ZeroDivisionError qui interromprait le graphe), minimum/maximum (borne
la valeur ACTUELLE — utile pour une variable globale, qui n'a pas de
min_value/max_value comme un champ d'objet), et alea (tire un nombre
aléatoire entre deux bornes).

screens/data_actions/compute_operation.py (déjà factorisé en Phase 0,
donc une seule implémentation pour apply_data_action.py/
apply_variable_action.py) : implémente les 6. "alea" est la seule à
deux opérandes — réutilise data_value au format "min,max" plutôt qu'une
nouvelle colonne de nœud (bornes remises dans l'ordre si inversées).
random.uniform pour un résultat décimal, random.randint pour un entier.

static/js/screen_edit/flow-editor.js + templates/screen_edit.html :
petit indice visuel — le champ "Valeur / montant" du formulaire de nœud
affiche "min,max (ex. 1,6)" quand "alea" est choisi, pour ne pas laisser
deviner ce format à deux nombres, différent de toutes les autres
opérations. Sinon aucun nouveau champ/changement de schéma nécessaire,
le <select> était déjà généré depuis DATA_OPERATIONS.

Vérifié : 250 tests passent (19 dans test_compute_operation.py, dont un
qui a dû être corrigé — il utilisait "multiplier" comme exemple
d'opération INCONNUE, devenu un mauvais exemple maintenant qu'elle
existe), 13 tests node:test toujours au vert, syntaxe JS validée.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-30 16:47:59 +02:00

21 lines
884 B
Python

# ---------- Actions : modifier une donnée d'objet ----------
DATA_OPERATIONS = [
("definir_texte", "Donner cette valeur — texte"),
("definir_nombre", "Donner cette valeur — nombre"),
("definir_bool_vrai", "Mettre à Vrai"),
("definir_bool_faux", "Mettre à Faux"),
("basculer_bool", "Basculer Vrai / Faux"),
("incrementer", "Augmenter de..."),
("decrementer", "Diminuer de..."),
# Phase 2 (hasard + opérations mathématiques) — voir
# screens/data_actions/compute_operation.py pour le calcul de chacune.
("multiplier", "Multiplier par..."),
("diviser", "Diviser par..."),
("modulo", "Reste de la division par... (modulo)"),
("minimum", "Ne jamais descendre sous..."),
("maximum", "Ne jamais dépasser..."),
("alea", "Tirer un nombre aléatoire entre... (min,max)"),
]
DATA_OPERATION_LABELS = dict(DATA_OPERATIONS)