OR-1 dataflow CPU sketch
at main 54 lines 1.3 kB view raw
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()