{"kind":"bloxsmith.graph","schema_version":"2","graph_id":"","title":"Un CSV propre, prêt à utiliser","editor":{"viewport":{"x":0,"y":0,"zoom":0.75}},"nodes":[{"id":"source","kind":"text","title":"CSV","position":{"x":80,"y":180},"inputs":[],"outputs":[{"id":1,"name":"out","title":"Sortie","emits":["message/*"],"multiplicity":"many","text":"nom, equipe, ville\n Alice , Produit , Paris\n\n Benoît, Technique , Lyon \n"}],"config":{}},{"id":"python","kind":"python","title":"Python · Transformation","position":{"x":400,"y":180},"inputs":[{"id":1,"name":"in","title":"Entrée","accepts":["message/*"],"multiplicity":"many","required":true,"execution_requirement":"required_for_execution"}],"outputs":[{"id":1,"name":"out","title":"Sortie","emits":["message/*"],"multiplicity":"many"}],"config":{"script":"import csv\nimport io\n\ndef run(inputs, outputs, params):\n    source = str(inputs.get(\"in\", \"\"))\n    target = io.StringIO()\n    writer = csv.writer(target, lineterminator=\"\\n\")\n    for row in csv.reader(io.StringIO(source)):\n        cleaned = [cell.strip() for cell in row]\n        if any(cleaned):\n            writer.writerow(cleaned)\n    outputs[\"out\"] = target.getvalue()\n","timeout_sec":10,"python_executable":"python3","params":[],"dynamic_code_enabled":false}},{"id":"result","kind":"display","title":"Résultat","position":{"x":720,"y":180},"inputs":[{"id":1,"name":"in","title":"Entrée","accepts":["message/*"],"multiplicity":"many","required":true,"execution_requirement":"required_for_execution"}],"outputs":[],"config":{}}],"edges":[{"id":"edge-1","from":{"node":"source","port":1},"to":{"node":"python","port":1},"kind":"data"},{"id":"edge-2","from":{"node":"python","port":1},"to":{"node":"result","port":1},"kind":"data"}],"inputs":[],"outputs":[],"annotations":[]}