python-poetry / python-poetry/tomlkit
out of order sections causing issues
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 850
- Forks
- 162
- Avg merge
- 13m
- Merged PRs (30d)
- 2
Description
When there are sections defined out of order, it seems tomlkit does not like it. Original issue was reported at https://github.com/python-poetry/poetry/issues/4718.
The following code runs without issues, however does not modify the toml. Using content.value_insert_after() causes AttributeError: 'dict' object has no attribute '_insert_after'.
If we remove build-system from the toml, the code below raises AttributeError: 'Table' object has no attribute '_insert_after'. However using content.value succeeds with the right results.
reproducer.py
import tomlkit
TOML = tomlkit.parse("""\
[tool.poetry]
name = "foobar"
version = "0.1.0"
description = ""
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
[tool.poetry.plugins]
""")
if __name__ == '__main__':
content = TOML["tool"]["poetry"]
content._insert_after("dependencies", "group", tomlkit.table(is_super_table=True))
content["group"]["one"] = tomlkit.table(is_super_table=True)
content["group"]["one"]["dependencies"] = tomlkit.table()
print(TOML.as_string())
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the reproducer.py code in the issue and run it against the shown TOML, comparing _insert_after, value_insert_after(), and content.value. Trace how out-of-order sections and the build-system table are represented; done means inserting the group section produces the intended TOML without either AttributeError.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100