OR-1 dataflow CPU sketch
1"""CLI entry point: python -m dfgraph path/to/file.dfasm [--port 8420]"""
2
3import argparse
4import sys
5import threading
6import webbrowser
7import time
8from pathlib import Path
9
10import uvicorn
11
12from dfgraph.server import create_app
13
14
15def main() -> None:
16 parser = argparse.ArgumentParser(
17 prog="dfgraph",
18 description="Visualise a dfasm dataflow program as an interactive graph.",
19 )
20 parser.add_argument(
21 "file",
22 type=Path,
23 help="Path to the .dfasm source file to visualise",
24 )
25 parser.add_argument(
26 "--port",
27 type=int,
28 default=8420,
29 help="Port for the web server (default: 8420)",
30 )
31
32 args = parser.parse_args()
33
34 if not args.file.exists():
35 print(f"Error: file not found: {args.file}", file=sys.stderr)
36 sys.exit(1)
37
38 if not args.file.suffix == ".dfasm":
39 print(f"Warning: expected .dfasm file, got: {args.file.suffix}", file=sys.stderr)
40
41 app = create_app(args.file.resolve())
42
43 def open_browser():
44 time.sleep(1)
45 webbrowser.open(f"http://127.0.0.1:{args.port}", new=2)
46
47 thread = threading.Thread(target=open_browser, daemon=True)
48 thread.start()
49
50 uvicorn.run(app, host="127.0.0.1", port=args.port, log_level="info")
51
52
53if __name__ == "__main__":
54 main()