From e52696a509a6ad460bf3808416f61602e38a9218 Mon Sep 17 00:00:00 2001 From: Sandwich Date: Mon, 5 Oct 2026 18:57:22 +0200 Subject: [PATCH] feat(validation): name a keyed collection as such when a list is given --- plugins/action/validate_inputs.py | 3 ++- tests/inputs/inputs_fixtures.yml | 2 +- tests/users/users_fixtures.yml | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/action/validate_inputs.py b/plugins/action/validate_inputs.py index c4e0123..d39ab25 100644 --- a/plugins/action/validate_inputs.py +++ b/plugins/action/validate_inputs.py @@ -78,7 +78,8 @@ class _Validator: self.errors.append(f"{path}: expected bool or dict, got {_kind(value)}") return if not TYPES[kind](value): - self.errors.append(f"{path}: expected {kind}, got {_kind(value)}") + keyed = len(spec.get("options", {})) == 1 and next(iter(spec["options"])).startswith("<") + self.errors.append(f"{path}: expected {'dict keyed by name' if keyed else kind}, got {_kind(value)}") return if "choices" in spec and value not in spec["choices"]: shown = "" if spec.get("no_log") else f", got {value!r}" diff --git a/tests/inputs/inputs_fixtures.yml b/tests/inputs/inputs_fixtures.yml index 0590fbb..eabc8e7 100644 --- a/tests/inputs/inputs_fixtures.yml +++ b/tests/inputs/inputs_fixtures.yml @@ -21,7 +21,7 @@ inputs_fixtures: name: web01 users: - name: alice - expect: ["fixture.users: expected dict, got list"] + expect: ["fixture.users: expected dict keyed by name, got list"] - name: comma-string-for-list value: diff --git a/tests/users/users_fixtures.yml b/tests/users/users_fixtures.yml index 4549b75..fadba06 100644 --- a/tests/users/users_fixtures.yml +++ b/tests/users/users_fixtures.yml @@ -52,7 +52,7 @@ users_fixtures: - name: ops password: pw expect: - fail: "system.users: expected dict, got list" + fail: "system.users: expected dict keyed by name, got list" - name: list-rejected-precomputed precomputed: true @@ -61,7 +61,7 @@ users_fixtures: - name: ops password: pw expect: - fail: "system.users: expected dict, got list" + fail: "system.users: expected dict keyed by name, got list" - name: scalar-entry-rejected system: