diff --git a/netutils/config/parser.py b/netutils/config/parser.py index 2681e551..0a51da91 100644 --- a/netutils/config/parser.py +++ b/netutils/config/parser.py @@ -621,7 +621,14 @@ def _update_same_line_children_configs(self) -> None: new_config_lines: t.List[ConfigLine] = [] for line in self.config_lines: if line in self.same_line_children: - previous_line = new_config_lines[-1] + try: + previous_line = new_config_lines[-1] + except IndexError as error: + raise IndexError( + f"This error is likely from a duplicate line detected at the line `{line.config_line}`, " + "see https://netutils.readthedocs.io/en/latest/dev/dev_config/#duplicate-line-detection " + f"for more details.\nOriginal Error: {error}" + ) previous_config_line = previous_line.config_line current_parents = previous_line.parents + (previous_config_line,) line = ConfigLine(line.config_line, current_parents) diff --git a/tests/unit/test_parser.py b/tests/unit/test_parser.py index dd15e840..c7ff747e 100644 --- a/tests/unit/test_parser.py +++ b/tests/unit/test_parser.py @@ -68,3 +68,14 @@ def test_incorrect_banner_ios(): ) with pytest.raises(ValueError): compliance.parser_map["cisco_ios"](banner_cfg).config_lines # pylint: disable=expression-not-assigned + + +def test_duplicate_line(): + logging = ( + "!\n" + "snmp-server community <> RO SNMP_ACL_RO\n" + "snmp-server community <> RO SNMP_ACL_RO\n" + "snmp-server community <> RW SNMP_ACL_RW\n" + ) + with pytest.raises(IndexError, match=r".*This error is likely from a duplicate line detected.*"): + compliance.parser_map["cisco_ios"](logging).config_lines # pylint: disable=expression-not-assigned