Start DataKit server
(port: Optional[int], host: str, no_open: bool, reload: bool)
| 44 | @click.option("--no-open", is_flag=True, help="Don't open browser automatically") |
| 45 | @click.option("--reload", is_flag=True, help="Enable auto-reload for development") |
| 46 | def serve(port: Optional[int], host: str, no_open: bool, reload: bool): |
| 47 | """Start DataKit server""" |
| 48 | if port is None: |
| 49 | port = find_free_port() |
| 50 | |
| 51 | click.echo("🚀 Starting DataKit...") |
| 52 | |
| 53 | app = create_app() |
| 54 | |
| 55 | # Print server info |
| 56 | url = f"http://{host}:{port}" |
| 57 | click.echo() |
| 58 | click.secho("✅ DataKit is running!", fg="green") |
| 59 | click.echo() |
| 60 | click.secho(f" Local: {url}", fg="cyan") |
| 61 | if host == "127.0.0.1": |
| 62 | click.secho(f" Network: http://0.0.0.0:{port}", fg="cyan") |
| 63 | click.echo() |
| 64 | click.secho(" Press Ctrl+C to stop the server", fg="bright_black") |
| 65 | click.echo() |
| 66 | |
| 67 | # Open browser |
| 68 | if not no_open: |
| 69 | click.secho("🌐 Opening browser...", fg="blue") |
| 70 | try: |
| 71 | webbrowser.open(url) |
| 72 | except Exception: |
| 73 | click.secho("⚠️ Could not open browser automatically", fg="yellow") |
| 74 | click.secho(" Please navigate to the URL above manually", fg="bright_black") |
| 75 | |
| 76 | # Start server |
| 77 | try: |
| 78 | uvicorn.run( |
| 79 | app, |
| 80 | host=host, |
| 81 | port=port, |
| 82 | reload=reload, |
| 83 | access_log=False, |
| 84 | log_level="error" if not reload else "info" |
| 85 | ) |
| 86 | except KeyboardInterrupt: |
| 87 | click.echo() |
| 88 | click.secho("🛑 Shutting down DataKit...", fg="yellow") |
| 89 | click.secho("✅ DataKit stopped successfully", fg="green") |
| 90 | |
| 91 | |
| 92 | @main.command() |
nothing calls this directly
no test coverage detected