From 874825d22d2328ce86669cc7d6e57feba0b92693 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Wed, 4 Feb 2026 13:34:40 +0000 Subject: [PATCH] Add core modules: CLI, recorder, server, snapshot manager --- api_snapshot/cli/serve.py | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 api_snapshot/cli/serve.py diff --git a/api_snapshot/cli/serve.py b/api_snapshot/cli/serve.py new file mode 100644 index 0000000..6aca635 --- /dev/null +++ b/api_snapshot/cli/serve.py @@ -0,0 +1,49 @@ +import sys +from typing import Any + +import click +from rich.console import Console + +from api_snapshot.server import create_app +from api_snapshot.snapshot import load_snapshot + +console = Console() + + +@click.command() +@click.argument("name") +@click.option("--host", "-H", default="127.0.0.1", help="Host to bind to") +@click.option("--port", "-p", default=8080, type=int, help="Port to listen on") +@click.option("--latency", "-l", default="original", type=click.Choice(["original", "fixed", "random", "none"]), help="Latency mode") +@click.option("--latency-ms", default=None, type=int, help="Fixed latency in milliseconds") +@click.option("--latency-min", default=None, type=int, help="Minimum latency for random mode") +@click.option("--latency-max", default=None, type=int, help="Maximum latency for random mode") +def serve( + name: str, + host: str, + port: int, + latency: str, + latency_ms: int | None, + latency_min: int | None, + latency_max: int | None, +) -> None: + """Start a mock server from a snapshot.""" + snapshot = load_snapshot(name) + + app = create_app(snapshot) + + latency_config = {"mode": latency} + if latency_ms is not None: + latency_config["fixed_ms"] = latency_ms + if latency_min is not None: + latency_config["min_ms"] = latency_min + if latency_max is not None: + latency_config["max_ms"] = latency_max + + click.echo(f"Starting mock server on http://{host}:{port}") + click.echo("Press Ctrl+C to stop") + + try: + app.run(host=host, port=port, debug=False) + except KeyboardInterrupt: + click.echo("\nServer stopped")