From 1bed95041679106012e5086bf8866e743ab6e7ff Mon Sep 17 00:00:00 2001 From: santhreal <64453045+santhreal@users.noreply.github.com> Date: Sat, 18 Jul 2026 00:17:24 -0700 Subject: [PATCH] Reject empty key part lists in key(). key([]) built an empty DottedKey that serialized as " = 1", which is not valid TOML; require at least one key part. --- tests/test_api.py | 8 ++++++++ tomlkit/api.py | 2 ++ 2 files changed, 10 insertions(+) diff --git a/tests/test_api.py b/tests/test_api.py index b5f31bc3..3eae9fd1 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -313,6 +313,14 @@ def test_key() -> None: assert isinstance(k, Key) +def test_key_rejects_empty_iterable() -> None: + # Empty key parts would serialize as " = 1", which is not valid TOML. + with pytest.raises(ValueError, match="at least one key part"): + tomlkit.key([]) + with pytest.raises(ValueError, match="at least one key part"): + tomlkit.key(()) + + def test_key_value() -> None: k, i = tomlkit.key_value("foo = 12") diff --git a/tomlkit/api.py b/tomlkit/api.py index b0f8cd6d..c747c86e 100644 --- a/tomlkit/api.py +++ b/tomlkit/api.py @@ -263,6 +263,8 @@ def key(k: str | Iterable[str]) -> Key: if isinstance(k, str): return SingleKey(k) keys = [SingleKey(_k) for _k in k] + if not keys: + raise ValueError("key() requires at least one key part") if len(keys) == 1: return keys[0] return DottedKey(keys)