51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import csv
|
|
import json
|
|
from pathlib import Path
|
|
|
|
|
|
FIELDS = [
|
|
"target",
|
|
"source",
|
|
"metric_name",
|
|
"metric_value",
|
|
"url",
|
|
"captured_at",
|
|
"status",
|
|
"confidence",
|
|
"notes",
|
|
"screenshot_path",
|
|
]
|
|
|
|
|
|
def parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(description="Convert evidence.json to evidence.csv.")
|
|
parser.add_argument("--json", required=True, help="Path to evidence.json")
|
|
parser.add_argument("--csv", required=True, help="Path to output evidence.csv")
|
|
return parser.parse_args()
|
|
|
|
|
|
def main() -> int:
|
|
args = parse_args()
|
|
json_path = Path(args.json)
|
|
csv_path = Path(args.csv)
|
|
csv_path.parent.mkdir(parents=True, exist_ok=True)
|
|
|
|
payload = json.loads(json_path.read_text(encoding="utf-8"))
|
|
rows = payload.get("evidence", [])
|
|
|
|
with csv_path.open("w", encoding="utf-8", newline="") as f:
|
|
writer = csv.DictWriter(f, fieldnames=FIELDS, extrasaction="ignore")
|
|
writer.writeheader()
|
|
for row in rows:
|
|
writer.writerow({k: row.get(k) for k in FIELDS})
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|
|
|