Files
2026-02-16 02:11:24 +03:30

61 lines
1.8 KiB
Python

import os
import csv
import json
from datetime import datetime
from workflow.module import Module
from workflow.io_port import InPort, AnyType
# Codes Go Below:
class Writer(Module):
"""
Generic Writer node.
Saves any data to disk in the desired format.
"""
def __init__(self):
super().__init__("Writer")
# Accept any data type
self.addInPort(InPort("data", AnyType()))
def run(self, context):
data = context.get_asset_value("Writer.data")
# Metadata from Model layer
output_dir = self.get_meta("output_dir", "results")
file_format = self.get_meta("format", "csv")
os.makedirs(output_dir, exist_ok=True)
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"output_{ts}.{file_format}"
path = os.path.join(output_dir, filename)
# Save based on format
if file_format == "csv":
with open(path, "w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
if isinstance(data, list):
if isinstance(data[0], dict):
w.writerow(data[0].keys())
for row in data:
w.writerow(row.values())
else:
for row in data:
w.writerow([row])
else:
w.writerow([data])
elif file_format == "json":
with open(path, "w", encoding="utf-8") as f:
json.dump(data, f, indent=2)
elif file_format == "txt":
with open(path, "w", encoding="utf-8") as f:
f.write(str(data))
else:
raise ValueError(f"Unsupported format: {file_format}")
return {"path": path}