Ouvrir le Studio

Code Block

Le node Code Block vous permet d'écrire et d'exécuter du code Python personnalisé dans votre workflow, avec des entrées/sorties dynamiques, plus de 94 packages et un environnement de test intégré.

À quoi sert le node Code Block ?

Le node Code Block vous permet d’écrire et d’exécuter du code Python personnalisé directement dans votre workflow. Lorsque les nodes intégrés ne couvrent pas votre cas d’usage spécifique, Code Block vous offre toute la flexibilité de la programmation avec accès à plus de 94 packages Python.

Cas d’usage courants :

  • Transformer des données d’une manière que les nodes standard ne peuvent pas gérer (parsing personnalisé, reformatage, calculs)
  • Exécuter des analyses de données ou des calculs statistiques avec NumPy, Pandas ou SciPy
  • Scraper ou traiter du contenu web avec BeautifulSoup et Requests
  • Appliquer une logique métier personnalisée, des algorithmes de scoring ou des règles de validation aux données du workflow

Configuration rapide

Ajoutez le node au canvas

Ouvrez la bibliothèque de nodes, allez dans Tools > Advanced, puis glissez-déposez le node Code Block sur votre espace de travail.

Définissez vos entrées

Ouvrez les paramètres du node et cliquez sur Open Code Editor. Dans l’éditeur, ajoutez les entrées dont votre code a besoin via la section Inputs à gauche. Chaque entrée a un nom (format identifiant Python) et peut être marquée comme obligatoire ou optionnelle.

Écrivez votre code

Écrivez votre code Python dans l’éditeur. La signature de fonction (def run(...)) et l’instruction return sont auto-générées — vous n’écrivez que le corps de la fonction. Vos entrées sont disponibles en tant que paramètres de la fonction.

Définissez vos sorties

Ajoutez les noms de sortie dans la section Outputs. Ceux-ci deviennent les valeurs que votre code renvoie aux nodes en aval. Une seule sortie renvoie la valeur directement ; plusieurs sorties renvoient un dictionnaire.

Testez votre code

Utilisez le panneau Test intégré sur le côté droit de l’éditeur. Fournissez des valeurs de test pour vos entrées et cliquez sur Run Test pour voir la sortie, stdout, stderr et le temps d’exécution.

Connectez au workflow

Connectez les nodes en amont pour fournir les données d’entrée, et connectez la sortie aux nodes en aval qui utiliseront vos résultats.

Paramètres de configuration

Éditeur de code

Code python required

Code Python — Le code personnalisé à exécuter. Vous n’écrivez que le corps de la fonction — la signature et l’instruction return sont auto-générées en fonction de vos entrées et sorties. Le code s’exécute dans un environnement Python sandboxé avec accès à plus de 94 packages.

Inputs dynamic required

Paramètres d’entrée — Définissez jusqu’à 10 variables d’entrée que votre code reçoit des nodes en amont. Chaque entrée possède :

  • Name : Doit être un identifiant Python valide (minuscules, lettres/chiffres/underscores, commence par une lettre)
  • Required/Optional : Les entrées obligatoires doivent être fournies ; les entrées optionnelles ont la valeur par défaut None
Outputs dynamic required

Variables de sortie — Définissez jusqu’à 5 variables de sortie que votre code renvoie aux nodes en aval. Les noms suivent les mêmes règles d’identifiant Python. Si vous définissez une seule sortie, sa valeur est renvoyée directement. Si vous définissez plusieurs sorties, elles sont renvoyées sous forme de dictionnaire.

Timeout number default: 60

Timeout (secondes) — Temps d’exécution maximum pour votre code (1–300 secondes). Si le code prend plus de temps, il est interrompu et une erreur est renvoyée.

Tip

N’écrivez pas d’instructions return dans le corps du code. Le return est auto-généré à partir de vos définitions de sortie. Si vous définissez les sorties result et count, le return généré est : return {"result": result, "count": count}.

Packages Python disponibles

L’environnement Code Block inclut plus de 94 packages pré-installés. Voici les packages principaux que vous pouvez utiliser directement :

PackageVersionCatégorie
aiohttp3.13.3HTTP / Async
beautifulsoup44.14.3Web Scraping
bokeh3.8.2Visualisation
gensim4.4.0NLP
imageio2.37.3Image I/O
joblib1.5.3Parallélisme
librosa0.11.0Audio
matplotlib3.10.8Visualisation
nltk3.9.3NLP
numpy2.4.3Data Science
opencv-python4.13.0.92Image/Vidéo
openpyxl3.1.5Fichiers Excel
pandas3.0.1Data Science
plotly6.6.0Visualisation
pytest9.0.2Tests
python-docx1.2.0Documents Word
pytz2026.1Fuseaux horaires
requests2.32.5HTTP
scikit-image0.26.0Traitement d’image
scikit-learn1.8.0Machine Learning
scipy1.17.1Calcul scientifique
seaborn0.13.2Visualisation
soundfile0.13.1Audio I/O
spacy3.8.11NLP
textblob0.19.0NLP
urllib32.6.3HTTP
xlrd2.0.2Fichiers Excel
Voir les 94+ packages (dépendances incluses)
PackageVersion
aiohappyeyeballs2.6.1
aiohttp3.13.3
aiosignal1.4.0
annotated-doc0.0.4
annotated-types0.7.0
attrs25.4.0
audioread3.1.0
beautifulsoup44.14.3
blis1.3.3
bokeh3.8.2
catalogue2.0.10
certifi2026.2.25
cffi2.0.0
charset-normalizer3.4.5
click8.3.1
cloudpathlib0.23.0
confection0.1.5
contourpy1.3.3
cycler0.12.1
cymem2.0.13
decorator5.2.1
et-xmlfile2.0.0
fonttools4.62.0
frozenlist1.8.0
gensim4.4.0
idna3.11
imageio2.37.3
iniconfig2.3.0
jinja23.1.6
joblib1.5.3
kiwisolver1.5.0
lazy-loader0.5
librosa0.11.0
llvmlite0.46.0
lxml6.0.2
markdown-it-py4.0.0
markupsafe3.0.3
matplotlib3.10.8
mdurl0.1.2
msgpack1.1.2
multidict6.7.1
murmurhash1.0.15
narwhals2.17.0
networkx3.6.1
nltk3.9.3
numba0.64.0
numpy2.4.3
opencv-python4.13.0.92
openpyxl3.1.5
packaging26.0
pandas3.0.1
pillow12.1.1
platformdirs4.9.4
plotly6.6.0
pluggy1.6.0
pooch1.9.0
preshed3.0.12
propcache0.4.1
pycparser3.0
pydantic2.12.5
pydantic-core2.41.5
pygments2.19.2
pyparsing3.3.2
pytest9.0.2
python-dateutil2.9.0
python-docx1.2.0
pytz2026.1
pyyaml6.0.3
regex2026.2.28
requests2.32.5
rich14.3.3
scikit-image0.26.0
scikit-learn1.8.0
scipy1.17.1
seaborn0.13.2
shellingham1.5.4
six1.17.0
smart-open7.5.1
soundfile0.13.1
soupsieve2.8.3
soxr1.0.0
spacy3.8.11
spacy-legacy3.0.12
spacy-loggers1.0.5
srsly2.5.2
textblob0.19.0
thinc8.3.10
threadpoolctl3.6.0
tifffile2026.3.3
tornado6.5.4
tqdm4.67.3
typer0.24.1
typing-extensions4.15.0
urllib32.6.3
wasabi1.1.3
weasel0.4.3
wrapt2.1.2
xlrd2.0.2
xyzservices2025.11.0
yarl1.23.0

Que produit le node en sortie ?

Le format de sortie dépend du nombre de sorties que vous définissez :

Sortie unique (ex. result) :

"The processed value"

La valeur est renvoyée directement au node en aval connecté.

Sorties multiples (ex. summary et score) :

{
  "summary": "The article covers SEO best practices...",
  "score": 85
}

Chaque sortie devient un point de connexion distinct sur le node.

(dynamic) varies

Le type de sortie dépend de ce que votre code Python renvoie. Il peut s’agir d’une chaîne de caractères, d’un nombre, d’une liste, d’un dictionnaire ou de toute valeur sérialisable en JSON.

Exemples d’utilisation

Exemple 1 : Calculer un score de lisibilité

Vous souhaitez calculer un score de lisibilité personnalisé pour du contenu d’article qu’aucun node intégré ne fournit.

Entrées : text (obligatoire) Sorties : score, level

Code :

words = text.split()
sentences = text.count('.') + text.count('!') + text.count('?')
if sentences == 0:
    sentences = 1
avg_words_per_sentence = len(words) / sentences
score = max(0, min(100, 100 - (avg_words_per_sentence - 15) * 5))
level = "Easy" if score > 70 else "Medium" if score > 40 else "Hard"

Exemple 2 : Parser et restructurer des données JSON

Vous recevez du JSON complexe d’une API et devez extraire et restructurer des champs spécifiques.

Entrées : raw_data (obligatoire) Sorties : cleaned

Code :

import json
data = json.loads(raw_data)
cleaned = json.dumps([
    {"name": item["full_name"], "email": item["contact"]["email"]}
    for item in data["results"]
    if item.get("active", False)
])

Exemple 3 : Analyser une image avec OpenCV

Extraire les couleurs dominantes d’une image de produit.

Entrées : image_url (obligatoire) Sorties : colors

Code :

import requests
import numpy as np
import cv2
from collections import Counter

response = requests.get(image_url)
img_array = np.frombuffer(response.content, np.uint8)
img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
pixels = img_rgb.reshape(-1, 3)
rounded = (pixels // 32 * 32).tolist()
most_common = Counter(map(tuple, rounded)).most_common(5)
colors = [{"rgb": list(c), "frequency": f} for c, f in most_common]

Bonnes pratiques

Tip

Testez toujours avant de déployer. Utilisez le panneau de test intégré pour vérifier que votre code fonctionne avec des données réelles avant de l’exécuter dans un workflow. Cela économise des crédits d’exécution et du temps de débogage.

Tip

Gardez votre code ciblé. Chaque Code Block devrait faire une seule chose bien. Si votre code dépasse 50 lignes, envisagez de le diviser en plusieurs nodes Code Block pour plus de clarté et de réutilisabilité.

Tip

Utilisez des noms d’entrée/sortie significatifs. Des noms comme text et score sont bien plus clairs que x et y lors de la lecture du canvas de workflow et de la connexion des nodes.

Warning

N’écrivez pas d’instructions return. Le return est auto-généré. Écrire votre propre return provoquera une erreur de validation et empêchera la sauvegarde ou le test.

Warning

Surveillez votre timeout. Les opérations complexes (traitement de grandes données, appels API multiples) peuvent dépasser le timeout par défaut de 60 secondes. Augmentez-le dans les paramètres si nécessaire, jusqu’à 300 secondes maximum.

Warning

Ne stockez pas de secrets dans le code. Évitez de coder en dur des clés API ou des mots de passe. Utilisez plutôt les variables de workflow ou les credentials d’intégration.

Problèmes courants

Mon code fonctionne dans le panneau de test mais échoue dans le workflow

Cause : Le panneau de test utilise des valeurs statiques, mais le workflow transmet des types ou formats de données différents.

Solution : Vérifiez les données réelles provenant des nodes en amont. Utilisez type() et print() en mode test pour vérifier. Les valeurs d’entrée provenant d’autres nodes sont souvent des chaînes de caractères — vous devrez peut-être utiliser json.loads() pour parser les données JSON.

J'obtiens une erreur de timeout

Cause : Votre code prend plus de temps que le timeout configuré.

Solution : Augmentez le timeout dans les paramètres (jusqu’à 300 secondes). Si le code est intrinsèquement lent, optimisez-le : réduisez la taille des données, évitez les boucles inutiles ou utilisez des opérations vectorisées avec NumPy/Pandas.

Je ne peux pas sauvegarder ni tester — le bouton est désactivé

Cause : Le corps de votre code contient une instruction return, ce qui n’est pas autorisé (le return est auto-généré).

Solution : Supprimez toute instruction return de votre code. À la place, assignez des valeurs à vos noms de variables de sortie et elles seront renvoyées automatiquement.

Un package dont j'ai besoin n'est pas disponible

Cause : L’environnement sandboxé dispose d’un ensemble fixe de plus de 94 packages.

Solution : Cliquez sur “View available packages” pour voir la liste complète. Si votre package n’est pas disponible, essayez une alternative (ex. utilisez requests au lieu de httpx). Pour des besoins très spécifiques, envisagez d’utiliser le node API Connector à la place.

Ma sortie est vide ou None

Cause : La variable de sortie n’a pas reçu de valeur dans tous les chemins du code.

Solution : Assurez-vous que vos variables de sortie sont assignées dans chaque branche de votre code (y compris les cas d’erreur). Utilisez des instructions print() dans le panneau de test pour déboguer le flux d’exécution.

Comment s’intègre-t-il dans un workflow ?

Code Block est un node polyvalent qui peut être placé n’importe où dans un workflow pour du traitement de données personnalisé :

graph LR
    Input[Source de données] --> Code[Code Block : Logique personnalisée]
    Code --> Next[LLM / Sortie / Étape suivante]

Nodes associés