|
6 | 6 | from pathlib import Path |
7 | 7 | from typing import Any |
8 | 8 |
|
9 | | -try: |
10 | | - import jsonschema |
11 | | - from jsonschema.validators import validator_for |
12 | | -except ImportError as exc: # pragma: no cover - exercised in environments without deps |
13 | | - raise RuntimeError( |
14 | | - "Missing dependency: jsonschema. Install with `python -m pip install -r requirements-dev.txt`." |
15 | | - ) from exc |
16 | | - |
17 | 9 | from agent_machine.paths import repo_root_from_file |
18 | 10 |
|
19 | 11 |
|
| 12 | +def jsonschema_validator_for() -> Any: |
| 13 | + """Import jsonschema lazily so non-validation commands stay dependency-light.""" |
| 14 | + try: |
| 15 | + from jsonschema.validators import validator_for |
| 16 | + except ImportError as exc: # pragma: no cover - exercised in environments without deps |
| 17 | + raise RuntimeError( |
| 18 | + "Missing dependency: jsonschema. Install with `python -m pip install -r requirements-dev.txt`." |
| 19 | + ) from exc |
| 20 | + return validator_for |
| 21 | + |
| 22 | + |
20 | 23 | def repo_root() -> Path: |
21 | 24 | """Return the repository root for the current checkout/package context.""" |
22 | 25 | return repo_root_from_file(__file__) |
@@ -59,15 +62,15 @@ def iter_json_files(directory: Path) -> list[Path]: |
59 | 62 |
|
60 | 63 | def check_schema(path: Path) -> dict[str, Any]: |
61 | 64 | schema = load_json(path) |
62 | | - validator_cls = validator_for(schema) |
| 65 | + validator_cls = jsonschema_validator_for()(schema) |
63 | 66 | validator_cls.check_schema(schema) |
64 | 67 | return schema |
65 | 68 |
|
66 | 69 |
|
67 | 70 | def validate_instance(instance_path: Path, schema_path: Path) -> None: |
68 | 71 | schema = load_json(schema_path) |
69 | 72 | instance = load_json(instance_path) |
70 | | - validator_cls = validator_for(schema) |
| 73 | + validator_cls = jsonschema_validator_for()(schema) |
71 | 74 | validator_cls.check_schema(schema) |
72 | 75 | validator = validator_cls(schema) |
73 | 76 | errors = sorted(validator.iter_errors(instance), key=lambda err: list(err.path)) |
|
0 commit comments