1313
1414
1515@lru_cache
16- def find_valid_extras (pyproject : str | PathLike [str ] | dict [str , Any ]) -> set [str ]:
17- if not isinstance (pyproject , dict ):
18- pyproject = read_pyproject (pyproject )
16+ def find_valid_extras (pyproject : str | PathLike [str ]) -> set [str ]:
17+ pyproject_dict = read_pyproject (pyproject )
1918
20- project : dict [str , Any ] = pyproject ["project" ]
19+ project : dict [str , Any ] = pyproject_dict ["project" ]
2120 optional_dependencies : dict [str , list [str ]] = project .setdefault (
2221 "optional-dependencies" , {}
2322 )
@@ -29,3 +28,50 @@ def read_pyproject(pyproject: str | PathLike[str]) -> dict[str, Any]:
2928 pyproject = Path (pyproject )
3029 with pyproject .open () as f :
3130 return toml .load (f )
31+
32+
33+ def combine_dev_dependencies (
34+ pyproject : str | PathLike [str ], destination : str | PathLike [str ]
35+ ) -> tuple [str , Path ]:
36+ pyproject = Path (pyproject )
37+ destination = Path (destination )
38+
39+ pyproject_obj = read_pyproject (pyproject )
40+ key , new_pyproject = dev_dependencies_to_dependencies (pyproject_obj )
41+ write_pyproject (new_pyproject , destination )
42+
43+ return key , destination
44+
45+
46+ def write_pyproject (
47+ pyproject : dict [str , Any ], pyproject_path : str | PathLike [str ]
48+ ) -> Path :
49+ pyproject_path = Path (pyproject_path )
50+ with pyproject_path .open ("w" ) as f :
51+ toml .dump (pyproject , f )
52+ return pyproject_path
53+
54+
55+ def dev_dependencies_to_dependencies (
56+ pyproject : str | PathLike [str ] | dict [str , Any ],
57+ ) -> tuple [str , dict [str , Any ]]:
58+ if not isinstance (pyproject , dict ):
59+ pyproject = read_pyproject (pyproject )
60+
61+ key = "dev_dependencies"
62+ project : dict [str , Any ] = pyproject ["project" ]
63+
64+ optional_dependencies : dict [str , list [str ]] = project .setdefault (
65+ "optional-dependencies" , {}
66+ )
67+ if key in optional_dependencies :
68+ key = f"new_{ key } "
69+
70+ tools : dict [str , Any ] = pyproject .setdefault ("tool" , {})
71+ uv_config : dict [str , Any ] = tools .setdefault ("uv" , {})
72+ dev_dependencies : list [str ] = uv_config .setdefault ("dev-dependencies" , [])
73+
74+ optional_dependencies [key ] = dev_dependencies
75+ pyproject ["project" ]["optional-dependencies" ] = optional_dependencies
76+
77+ return key , pyproject
0 commit comments