11from __future__ import annotations
22
3+ from copy import deepcopy
34from pathlib import Path
45from typing import TYPE_CHECKING , Any
56
6- import toml
7+ import tomlkit
78
89if TYPE_CHECKING :
910 from os import PathLike
@@ -26,51 +27,29 @@ def find_valid_groups(pyproject: dict[str, Any]) -> set[str]:
2627
2728def read_pyproject (pyproject : str | PathLike [str ]) -> dict [str , Any ]:
2829 pyproject = Path (pyproject )
29- with pyproject .open () as f :
30- return toml .load (f )
31-
32-
33- def combine_dev_dependencies (
34- pyproject : dict [str , Any ], destination : str | PathLike [str ]
35- ) -> tuple [str , Path ]:
36- destination = Path (destination )
37- pyproject = pyproject .copy ()
38-
39- key , new_pyproject = dev_dependencies_to_dependencies (pyproject )
40- write_pyproject (new_pyproject , destination )
41-
42- return key , destination
30+ with pyproject .open ("rb" ) as f :
31+ return tomlkit .load (f )
4332
4433
4534def write_pyproject (
4635 pyproject : dict [str , Any ], pyproject_path : str | PathLike [str ]
4736) -> Path :
4837 pyproject_path = Path (pyproject_path )
4938 with pyproject_path .open ("w" ) as f :
50- toml .dump (pyproject , f )
39+ tomlkit .dump (pyproject , f )
5140 return pyproject_path
5241
5342
54- def dev_dependencies_to_dependencies (
55- pyproject : dict [str , Any ],
56- ) -> tuple [str , dict [str , Any ]]:
57- pyproject = pyproject .copy ()
58- key = "dev_dependencies"
59-
43+ def remove_dynamic_version (pyproject : dict [str , Any ]) -> dict [str , Any ]:
6044 project : dict [str , Any ] = pyproject ["project" ]
45+ if "dynamic" not in project :
46+ return pyproject
6147
62- optional_dependencies : dict [str , list [str ]] = project .setdefault (
63- "optional-dependencies" , {}
64- )
65- if key in optional_dependencies :
66- key = f"new_{ key } "
67-
68- tools : dict [str , Any ] = pyproject .setdefault ("tool" , {})
69- uv_config : dict [str , Any ] = tools .setdefault ("uv" , {})
70- dev_dependencies : list [str ] = uv_config .setdefault ("dev-dependencies" , [])
71-
72- optional_dependencies [key ] = dev_dependencies
73- project ["optional-dependencies" ] = optional_dependencies
74- pyproject ["project" ] = project
48+ dynamic : list [str ] = project ["dynamic" ]
49+ if "version" not in dynamic :
50+ return pyproject
7551
76- return key , pyproject
52+ pyproject = deepcopy (pyproject )
53+ pyproject ["project" ]["dynamic" ].remove ("version" )
54+ pyproject ["project" ]["version" ] = "0.1.0"
55+ return pyproject
0 commit comments