use bashkit::{Bash, CPythonLimits};
use std::time::Duration;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
bashkit::warm_up().map_err(anyhow::Error::msg)?;
let mut bash = Bash::builder()
.cpython_with_limits(CPythonLimits::default().max_duration(Duration::from_secs(10)))
.build();
let r = bash
.exec(
r#"python3 - <<'EOF'
from dataclasses import dataclass
import json, statistics
@dataclass
class Sample:
name: str
values: list
s = Sample("latency", [3, 1, 4, 1, 5])
print(json.dumps({"name": s.name, "median": statistics.median(s.values)}))
EOF"#,
)
.await?;
print!("{}", r.stdout);
assert_eq!(r.stdout, "{\"name\": \"latency\", \"median\": 3}\n");
let r = bash
.exec(
"printf 'a,b\\n1,2\\n3,4\\n' > /data.csv
python3 -c 'import csv; rows = list(csv.DictReader(open(\"/data.csv\"))); \
open(\"/sum.txt\", \"w\").write(str(sum(int(r[\"b\"]) for r in rows)))'
cat /sum.txt",
)
.await?;
println!("{}", r.stdout);
assert_eq!(r.stdout, "6");
let r = bash
.exec("python3 -c 'import sys; sys.exit(\"failed\")' || echo \"exit=$?\"")
.await?;
print!("{}", r.stdout);
assert_eq!(r.stdout, "exit=1\n");
let r = bash
.exec("python3 -c 'import subprocess; subprocess.run([\"ls\"])' 2>&1 | tail -1")
.await?;
print!("{}", r.stdout);
assert!(r.stdout.contains("OSError"));
Ok(())
}