Skip to main content

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ées1 flux (in)
Sorties1 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​

SymboleDescription
dfLe DataFrame pandas d'entrée (une copie ; l'amont n'est jamais modifié)
pdimport pandas as pd
npimport 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ètreDéfautDescription
python_codepass-throughLe 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_seconds60Durée maximale d'exécution. Au-delà, la brick échoue.
schema_modepassthroughSché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.

Timeout best-effort

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.

Sécurité

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 :