24 lines
1.2 KiB
Python
24 lines
1.2 KiB
Python
import argparse, json, sys
|
|
from pathlib import Path
|
|
from .agent import LandingZoneAgent, ValidationError, load_config
|
|
|
|
def main(argv=None) -> int:
|
|
p = argparse.ArgumentParser(description="Generate a TSD and draw.io architecture diagram")
|
|
p.add_argument("--input", required=True, help="requirements JSON")
|
|
p.add_argument("--output-dir", required=True)
|
|
p.add_argument("--config", default="config/default.json")
|
|
args = p.parse_args(argv)
|
|
try:
|
|
data = json.loads(Path(args.input).read_text())
|
|
result = LandingZoneAgent(load_config(args.config)).generate(data)
|
|
out = Path(args.output_dir); out.mkdir(parents=True, exist_ok=True)
|
|
result_files = {"tsd.md": result.tsd_markdown, "architecture.drawio": result.drawio_xml, "validation.json": json.dumps(result.validation.__dict__, indent=2) + "\n"}
|
|
for name, content in result_files.items(): (out / name).write_text(content)
|
|
return 0
|
|
except ValidationError as exc:
|
|
print(f"validation error: {exc}", file=sys.stderr); return 2
|
|
except (OSError, json.JSONDecodeError, RuntimeError) as exc:
|
|
print(f"generation error: {exc}", file=sys.stderr); return 1
|
|
|
|
if __name__ == "__main__": sys.exit(main())
|