New element in a table is placed in the wrong place
Closed this issue · 0 comments
Namnamseo commented
Hi, nice work here. Thank you for the project.
I have a bug report to file.
x = tomlkit.parse('''
[root1.root2]
value = 1
[root1.root2.a.b.c]
value = 2
[WALRUS]
goo = "gjob"
[root1.root2.x]
value = 4
''')
x['root1']['root2']['a'].add('tmp', 'hi')
print(tomlkit.dumps(x))
Expected (amongst other formatting possibilities):
[root1.root2]
value = 1
[root1.root2.a]
tmp = "hi"
[root1.root2.a.b.c]
value = 2
[WALRUS]
goo = "gjob"
[root1.root2.x]
value = 4
But the code rather prints:
[root1.root2]
value = 1
[root1.root2.a]
[root1.root2.a.b.c]
value = 2
tmp = "hi"
[WALRUS]
goo = "gjob"
[root1.root2.x]
value = 4
This TOML code places tmp = "hi"
under a.b.c
, not a
(as the Python code said).
Another instance of the bug is:
x = tomlkit.parse('''
[root1.root2.a.b.c]
value = 2
[WALRUS]
goo = "gjob"
[root1.root2.x]
value = 4
''')
x['root1']['root2']['a'].add('tmp', 'hi')
print(tomlkit.dumps(x))
(NOTE: the code is almost the same. The only difference is that [root1.root2]
is gone in the TOML.)
In this case, the output does not change with .add()
, nor even a direct setitem:
>>> x['root1']['root2']['a']['tmp'] = 'hi'
>>> x['root1']['root2']['a']
{'b': {'c': {'value': 2}}}
Maybe the update is happening on some kind of proxy object, which interacts badly with the original object, I don't know.
Maybe there's a bug in parsing out-of-order sections, cc. #196 #261?