Skip to content

Commit 995b90c

Browse files
committed
feat(cli): validate --parser against valid set via click.Choice (#77)
1 parent 82958e4 commit 995b90c

3 files changed

Lines changed: 14 additions & 3 deletions

File tree

openkb/cli.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ def filter(self, record: logging.LogRecord) -> bool:
4343
from openkb.config import DEFAULT_CONFIG, load_config, save_config, load_global_config, register_kb
4444
from openkb.converter import convert_document
4545
from openkb.log import append_log
46+
from openkb.parsers.registry import VALID_PARSERS
4647
from openkb.schema import AGENTS_MD
4748

4849
# Suppress warnings after all imports — markitdown overrides filters at import time
@@ -576,7 +577,8 @@ def init(model, language):
576577
@cli.command()
577578
@click.argument("path")
578579
@click.option("--parser", "parser_override", default=None,
579-
help="Override the configured parser for this run (local|mineru|mistral|vlm).")
580+
type=click.Choice(VALID_PARSERS),
581+
help="Override the configured parser for this run.")
580582
@click.pass_context
581583
def add(ctx, path, parser_override):
582584
"""Add a document or directory of documents at PATH to the knowledge base.

openkb/parsers/registry.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from openkb.parsers.base import Parser
77
from openkb.parsers.local import LocalParser
88

9-
_VALID = ("local", "mineru", "mistral", "vlm")
9+
VALID_PARSERS = ("local", "mineru", "mistral", "vlm")
1010

1111

1212
def get_parser(
@@ -34,5 +34,5 @@ def get_parser(
3434
from openkb.parsers.mineru import MineruParser
3535
return MineruParser(opts)
3636
raise ValueError(
37-
f"Unknown parser {name!r}. Valid options: {', '.join(_VALID)}."
37+
f"Unknown parser {name!r}. Valid options: {', '.join(VALID_PARSERS)}."
3838
)

tests/test_add_command.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,3 +164,12 @@ def test_add_single_file_threads_parser_override(tmp_path):
164164
# parser_override must reach convert_document
165165
assert cd.call_args.kwargs.get("parser_override") == "mistral" \
166166
or (len(cd.call_args.args) >= 3 and cd.call_args.args[2] == "mistral")
167+
168+
169+
def test_add_parser_option_rejects_invalid_choice(tmp_path):
170+
from click.testing import CliRunner
171+
from openkb.cli import cli
172+
runner = CliRunner()
173+
result = runner.invoke(cli, ["add", "--parser", "bogus", str(tmp_path / "x.pdf")])
174+
assert result.exit_code != 0
175+
assert "bogus" in result.output or "Invalid value" in result.output

0 commit comments

Comments
 (0)