Code Python
Code Python (t_custom) transforme le flux avec du code Python libre
quand aucune brick standard ne convient. Le contrat est simple, façon
notebook : le code reçoit une variable df (le DataFrame pandas d'entrée)
et doit la modifier ou la réassigner ; la valeur finale de df devient la
sortie de la brick.
| Ports | |
|---|---|
| Entrées | 1 flux (in) |
| Sorties | 1 flux (out) : la valeur finale de df |
Si df n'est plus un DataFrame pandas à la fin du code, la brick échoue avec
une erreur explicite.
Environnement disponible
| Symbole | Description |
|---|---|
df | Le DataFrame pandas d'entrée (une copie ; l'amont n'est jamais modifié) |
pd | import pandas as pd |
np | import numpy as np |
log(msg) | Écrit un message d'information dans les logs d'exécution |
log_warning(msg) | Écrit un avertissement |
Une erreur dans le code remonte avec le numéro de ligne et un extrait de la ligne fautive dans les logs d'exécution.
Exemple
# df : DataFrame d'entrée (pandas)
df["total"] = df["prix"] * df["quantite"]
df = df[df["total"] > 0]
log(f"{len(df)} lignes conservées")
Paramètres
| Paramètre | Défaut | Description |
|---|---|---|
python_code | pass-through | Le code Python à exécuter (requis). |
pip_packages | — | Packages pip à installer avant l'exécution (un par ligne ou séparés par des virgules). Nécessite un runner autorisant pip et l'accès réseau. |
timeout_seconds | 60 | Durée maximale d'exécution. Au-delà, la brick échoue. |
schema_mode | passthrough | Schéma de sortie : identique à l'entrée, ou colonnes déclarées. |
output_columns | [] | Colonnes déclarées (nom + type) quand schema_mode vaut declare. |
Schéma de sortie
Le schéma produit par du code libre n'est pas connu statiquement :
passthrough(défaut) : les bricks en aval voient le schéma d'entrée. Convient si vous ajoutez ou retirez peu de colonnes ;declare: vous listez manuellement les colonnes de sortie (nom + type), qui deviennent visibles pour les bricks en aval.
Sous le capot
La brick est un composant Fluhoms classique : elle hérite de ComponentBase,
exécute votre code dans un espace de noms contrôlé sur le runner, puis émet
le résultat via self._output("out", df) et clôt avec self._end(). Votre
code ne manipule que df, l'infrastructure d'entrées/sorties est gérée pour
vous.
Au dépassement du timeout, la brick échoue proprement mais le thread Python n'est pas interrompu de force : un code réellement bloquant peut continuer en arrière-plan jusqu'à la fin du processus.
Le code s'exécute avec les droits du runner, sans bac à sable. N'exécutez que du code de confiance. Le code exécuté est tracé dans les logs (niveau debug).
Variantes source et sortie
Le même contrat existe en début et en fin de pipeline :
- Code Python (source) : le
code définit
dfpour produire le flux ; - Code Python (sortie) : le code
consomme
df(pas de sortie).