Spaces:
Sleeping
Sleeping
Commit ·
642444a
1
Parent(s): f8f1ce8
feat(web): python -m proteus.web launcher
Browse files- proteus/web/__main__.py +29 -0
- tests/web/test_server.py +10 -0
proteus/web/__main__.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""`python -m proteus.web` — launch the interactive color-grid play server."""
|
| 2 |
+
from __future__ import annotations
|
| 3 |
+
|
| 4 |
+
import argparse
|
| 5 |
+
|
| 6 |
+
import proteus.grid # noqa: F401 (registers scenarios before any request)
|
| 7 |
+
from proteus.web.server import make_server
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def main(argv: list[str] | None = None) -> int:
|
| 11 |
+
parser = argparse.ArgumentParser(prog="proteus.web")
|
| 12 |
+
parser.add_argument("--host", default="127.0.0.1")
|
| 13 |
+
parser.add_argument("--port", type=int, default=8000)
|
| 14 |
+
args = parser.parse_args(argv)
|
| 15 |
+
|
| 16 |
+
server = make_server(args.host, args.port)
|
| 17 |
+
host, port = server.server_address[0], server.server_address[1]
|
| 18 |
+
print(f"PROTEUS arena — open http://{host}:{port}/ (Ctrl-C to stop)")
|
| 19 |
+
try:
|
| 20 |
+
server.serve_forever()
|
| 21 |
+
except KeyboardInterrupt:
|
| 22 |
+
print("\nstopping.")
|
| 23 |
+
finally:
|
| 24 |
+
server.server_close()
|
| 25 |
+
return 0
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
if __name__ == "__main__":
|
| 29 |
+
raise SystemExit(main())
|
tests/web/test_server.py
CHANGED
|
@@ -112,3 +112,13 @@ def test_finish_appends_trace_and_returns_metrics(tmp_path):
|
|
| 112 |
assert payload["trace_path"] == str(out)
|
| 113 |
assert "survival_fraction" in payload["metrics"]
|
| 114 |
assert out.exists() and out.read_text().strip() # one JSONL line written
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
assert payload["trace_path"] == str(out)
|
| 113 |
assert "survival_fraction" in payload["metrics"]
|
| 114 |
assert out.exists() and out.read_text().strip() # one JSONL line written
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
def test_make_server_binds_and_has_router(tmp_path):
|
| 118 |
+
srv = server.make_server("127.0.0.1", 0) # port 0 = ephemeral, no serve_forever
|
| 119 |
+
try:
|
| 120 |
+
assert srv.server_address[0] == "127.0.0.1"
|
| 121 |
+
# the bound handler carries its own fresh registry
|
| 122 |
+
assert isinstance(srv.RequestHandlerClass.registry, dict)
|
| 123 |
+
finally:
|
| 124 |
+
srv.server_close()
|