From a3222d5ebe2563368cf8defa96c6243406a11aca Mon Sep 17 00:00:00 2001 From: latte Date: Wed, 14 Oct 2026 16:24:51 +0200 Subject: [PATCH] fix: report an invalid --port with a short message instead of listing every choice --- src/aegis_gitea_mcp/cli.py | 14 ++++++++++++-- tests/test_cli.py | 13 +++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/aegis_gitea_mcp/cli.py b/src/aegis_gitea_mcp/cli.py index 4307a79..afd69c7 100644 --- a/src/aegis_gitea_mcp/cli.py +++ b/src/aegis_gitea_mcp/cli.py @@ -17,6 +17,17 @@ from aegis_gitea_mcp.config import Settings, get_settings, reset_settings from aegis_gitea_mcp.logging_utils import configure_logging +def _port(value: str) -> int: + """Parse ``--port`` (argparse ``type``): an integer from 1 to 65535.""" + try: + port = int(value) + except ValueError: + raise argparse.ArgumentTypeError("must be an integer from 1 to 65535") from None + if not 1 <= port <= 65535: + raise argparse.ArgumentTypeError("must be between 1 and 65535") + return port + + def build_parser() -> argparse.ArgumentParser: """Build the argument parser.""" parser = argparse.ArgumentParser( @@ -35,9 +46,8 @@ def build_parser() -> argparse.ArgumentParser: serve.add_argument("--host", default=None, help="HTTP bind address (default: MCP_HOST)") serve.add_argument( "--port", - type=int, + type=_port, default=None, - choices=range(1, 65536), metavar="PORT", help="HTTP port (default: MCP_PORT)", ) diff --git a/tests/test_cli.py b/tests/test_cli.py index b5e8669..2b87b38 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -33,3 +33,16 @@ def test_package_version_matches_pyproject() -> None: data = tomllib.loads((Path(__file__).parent.parent / "pyproject.toml").read_text()) assert data["project"]["version"] == __version__ + + +@pytest.mark.parametrize("value", ["0", "65536", "-1", "http", "80.5"]) +def test_serve_rejects_bad_ports_with_a_short_message( + value: str, capsys: pytest.CaptureFixture[str] +) -> None: + with pytest.raises(SystemExit) as exit_info: + build_parser().parse_args(["serve", "--port", value]) + + err = capsys.readouterr().err + assert exit_info.value.code == 2 + assert "--port" in err and "65535" in err + assert len(err) < 500