Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 21 additions & 11 deletions src/dayamlchecker/yaml_structure.py
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,8 @@ class DAFields:
"__line__",
}

mako_keys = {"default", "hint", "label", "note"}

js_modifier_keys = ("js show if", "js hide if", "js enable if", "js disable if")
py_modifier_keys = ("show if", "hide if", "enable if", "disable if")

Expand Down Expand Up @@ -607,18 +609,26 @@ def _validate_field_modifiers(self, fields_list):
continue

for field_key in field_item:
if (
isinstance(field_key, str)
and field_key != "__line__"
and field_key not in self.modifier_keys
and field_key.lower() in self.modifier_keys
):
self.errors.append(
(
f'Invalid field key "{field_key}". docassemble field modifier keys are case-sensitive; use "{field_key.lower()}"',
self._line_for(field_item),
if isinstance(field_key, str) and field_key != "__line__":
if (
field_key not in self.modifier_keys
and field_key.lower() in self.modifier_keys
):
self.errors.append(
(
f'Invalid field key "{field_key}". docassemble field modifier keys are case-sensitive; use "{field_key.lower()}"',
self._line_for(field_item),
)
)
)
if field_key in self.mako_keys:
the_mako = MakoText(str(field_item[field_key]))
for err in the_mako.errors:
self.errors.append(
(
f"{field_key} value has {err[0]}",
self._line_for(field_item, err[1]),
)
)

for js_key in self.js_modifier_keys:
if js_key in field_item:
Expand Down
24 changes: 24 additions & 0 deletions tests/test_yaml_structure.py
Original file line number Diff line number Diff line change
Expand Up @@ -1469,6 +1469,30 @@ def test_fields_code_dict_valid(self):
f"Expected no fields-shape errors, got: {field_errors}",
)

def test_fields_mako_templates_valid(self):
"""Error: fields with mako in them are checked."""
valid = """
question: |
Interrogatories
fields:
- "Ints fields": ints_fields
default: |
${ 1 + 3
+ 5}
continue button field: interrogatory_questions
"""
errs = find_errors_from_string(valid, input_file="<string_valid>")
field_errors = [
e
for e in errs
if "default value has (indentationerror)" in e.err_str.lower()
]
self.assertEqual(
len(field_errors),
1,
f"Expected one mako field errors, got: {field_errors}",
)

def test_interview_order_reference_without_matching_guard_errors(self):
"""Error when interview-order style code references a conditionally shown field without guard"""
invalid = """
Expand Down
Loading