What You’ll Learn
- Writing data files into a sandbox with
sbx.files.write()
- Writing executable Python scripts into a sandbox
- Running scripts with
sbx.commands.run()
- Reading generated output files back with
sbx.files.read()
- End-to-end data pipeline inside an isolated sandbox
Prerequisites
This example is available in Python. TypeScript version coming soon.
Code Walkthrough
Upload the CSV dataset directly as a string — no disk I/O on the host:
from declaw import Sandbox
sbx = Sandbox.create(template="python", timeout=300)
try:
csv_data = """name,age,city,salary
Alice,30,New York,85000
Bob,25,San Francisco,92000
Charlie,35,Chicago,78000
Diana,28,Boston,95000
Eve,32,Seattle,88000"""
sbx.files.write("/tmp/data.csv", csv_data)
print("Wrote /tmp/data.csv")
Upload the analysis script as a multiline Python string:
analysis_script = '''
import csv
import json
with open("/tmp/data.csv") as f:
reader = csv.DictReader(f)
rows = list(reader)
results = {
"total_records": len(rows),
"avg_age": sum(int(r["age"]) for r in rows) / len(rows),
"avg_salary": sum(int(r["salary"]) for r in rows) / len(rows),
"cities": list(set(r["city"] for r in rows)),
"highest_salary": max(rows, key=lambda r: int(r["salary"]))["name"],
}
with open("/tmp/results.json", "w") as f:
json.dump(results, f, indent=2)
print(json.dumps(results, indent=2))
'''
sbx.files.write("/tmp/analyze.py", analysis_script)
print("Wrote /tmp/analyze.py")
Run the analysis and capture stdout:
result = sbx.commands.run("python3 /tmp/analyze.py")
print(f"stdout:\n{result.stdout}")
Read back the generated results file:
results_content = sbx.files.read("/tmp/results.json")
print(f"results.json:\n{results_content}")
finally:
sbx.kill()
This pattern works for any file format — JSON, Parquet, images, or binary data. sbx.files.write() accepts both string and bytes content.
Expected Output
==================================================
Declaw Upload Dataset & Analyze Example
==================================================
--- Creating Sandbox ---
Sandbox created: sbx_abc123
--- Uploading CSV Dataset ---
Wrote /tmp/data.csv
--- Uploading Analysis Script ---
Wrote /tmp/analyze.py
--- Running Analysis ---
stdout:
{
"total_records": 5,
"avg_age": 30.0,
"avg_salary": 87600.0,
"cities": ["New York", "San Francisco", "Chicago", "Boston", "Seattle"],
"highest_salary": "Diana"
}
--- Reading Results File ---
results.json:
{
"total_records": 5,
"avg_age": 30.0,
"avg_salary": 87600.0,
"cities": ["New York", "San Francisco", "Chicago", "Boston", "Seattle"],
"highest_salary": "Diana"
}
--- Cleaning Up ---
Sandbox killed.
==================================================
Done!
==================================================