Skip to content

Commit 8fd1fe3

Browse files
authored
Add Better error message for lists in config file (#6200)
Add Better error message for lists in config file
2 parents f2f3275 + e8b3edf commit 8fd1fe3

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

readthedocs/config/config.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,19 @@ def __init__(self, key, code, error_message, source_file=None):
114114
self.code = code
115115
self.source_file = source_file
116116
message = self.message_template.format(
117-
key=key,
117+
key=self._get_display_key(),
118118
code=code,
119119
error=error_message,
120120
)
121121
super().__init__(message, code=code)
122122

123+
def _get_display_key(self):
124+
# Checks for patterns similar to `python.install.0.requirements`
125+
# if matched change to `python.install[0].requirements` using backreference.
126+
return re.sub(
127+
r'^(python\.install)(\.)(\d+)(\.\w+)$', r'\1[\3]\4', self.key
128+
)
129+
123130

124131
class BuildConfigBase:
125132

readthedocs/config/tests/test_config.py

+17
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,23 @@ def test_python_install_requirements_does_not_allow_null(self, tmpdir):
10981098
build.validate()
10991099
assert excinfo.value.key == 'python.install.0.requirements'
11001100

1101+
def test_python_install_requirements_error_msg(self, tmpdir):
1102+
build = self.get_build_config(
1103+
{
1104+
'python': {
1105+
'install': [{
1106+
'path': '.',
1107+
'requirements': None,
1108+
}],
1109+
},
1110+
},
1111+
source_file=str(tmpdir.join('readthedocs.yml')),
1112+
)
1113+
with raises(InvalidConfig) as excinfo:
1114+
build.validate()
1115+
1116+
assert str(excinfo.value) == 'Invalid "python.install[0].requirements": expected string'
1117+
11011118
def test_python_install_requirements_does_not_allow_empty_string(self, tmpdir):
11021119
build = self.get_build_config(
11031120
{

0 commit comments

Comments
 (0)