From 5bc89eda4e1dd4bab05ec0d20e5962d56d1786d9 Mon Sep 17 00:00:00 2001 From: Frost Ming Date: Mon, 26 Sep 2022 15:49:36 +0800 Subject: [PATCH] fix: Clear the existing table header (#234) --- CHANGELOG.md | 4 ++++ tests/test_toml_document.py | 29 +++++++++++++++++++++++++++++ tomlkit/container.py | 2 +- tomlkit/items.py | 2 +- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6eccccb..c0563e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Clear the existing table header when it is adding to another table. ([#230](https://github.com/sdispater/tomlkit/issues/230)) + ## [0.11.4] - 2022-08-12 ### Fixed diff --git a/tests/test_toml_document.py b/tests/test_toml_document.py index f253706..b5a6f62 100644 --- a/tests/test_toml_document.py +++ b/tests/test_toml_document.py @@ -1001,3 +1001,32 @@ def test_remove_item_from_super_table(): """ assert doc.as_string() == dedent(expected) + + +def test_nested_table_update_display_name(): + content = """\ + [parent] + + [parent.foo] + x = 1 + """ + + doc = parse(dedent(content)) + sub = """\ + [foo] + y = 2 + + [bar] + z = 3 + """ + doc["parent"].update(parse(dedent(sub))) + expected = """\ + [parent] + + [parent.foo] + y = 2 + + [parent.bar] + z = 3 + """ + assert doc.as_string() == dedent(expected) diff --git a/tomlkit/container.py b/tomlkit/container.py index c3b85ad..4b40a13 100644 --- a/tomlkit/container.py +++ b/tomlkit/container.py @@ -194,7 +194,7 @@ def append(self, key: Union[Key, str, None], item: Item) -> "Container": prev = self._previous_item() prev_ws = isinstance(prev, Whitespace) or ends_with_whitespace(prev) if isinstance(item, Table): - if item.name != key.key: + if not self._parsed: item.invalidate_display_name() if self._body and not (self._parsed or item.trivia.indent or prev_ws): item.trivia.indent = "\n" diff --git a/tomlkit/items.py b/tomlkit/items.py index 695d7f7..59addb9 100644 --- a/tomlkit/items.py +++ b/tomlkit/items.py @@ -205,7 +205,7 @@ def item( v.items(), key=lambda i: (isinstance(i[1], dict), i[0] if _sort_keys else 1), ): - i = item(_v, _parent=a, _sort_keys=_sort_keys) + i = item(_v, _parent=table, _sort_keys=_sort_keys) if isinstance(table, InlineTable): i.trivia.trail = ""