python-poetry / python-poetry/tomlkit

Dump headers of parent nested tables

Open
#447 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
850
Forks
162
Avg merge
13m
Merged PRs (30d)
2

Description

Hello,

  1. I was trying to convert this python dictionnary

    my_dict = {
        "apps": {
            "test": {
                "whatever_1": {
                    "date": "2025-12-16",
                },
                "whatever_2": {
                    "date": "2025-12-16",
                },
            },
        },
    }
    

    ...to this TOML output:

    [apps]
        [apps.test]
            [apps.test.whatever_1]
            date = "2025-12-16"
            [apps.test.whatever_2]
            date = "2025-12-16"
    
    
  2. I first had great hopes with:

    print(tomlkit.dumps(my_dict))
    

    but that outputs

    [apps.test.whatever_1]
    date = "2025-12-16"
    
    [apps.test.whatever_2]
    date = "2025-12-16"
    
  3. With a bit of pain, I eventually manage to get the expected output using:

    my_dict_new = tomlkit.document()
    for category_name, apps in my_dict.items():
        cat = tomlkit.table(False)
        for app_name, app_reports in apps.items():
            app = tomlkit.table(False).indent(4)
            for report_name, report_data in app_reports.items():
                rep = tomlkit.table(False).indent(4)
                for key, val in report_data.items():
                    rep.add(key, val).indent(4) 
                app.append(report_name, rep)
            cat.append(app_name, app)
        my_dict_new.append(category_name, cat)
    
    print(tomlkit.dumps(my_dict_new))
    

As this the reverse scenario from #47 and #107 in which the target output here seemed to be the default .dumps() output at the time, I wonder whether there would be a quicker way to access the old behavior again (i.e. dump headers for parent nested headers) ?

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the tomlkit.dumps(my_dict) entry point and compare its current output with the requested parent-table headers. Determine how the desired formatting could be exposed, then verify the nested apps.test.whatever_1 and apps.test.whatever_2 tables retain their headers and indentation.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.