99def build_dependency_graph ():
1010 dependent_graph : defaultdict [str , set [str ]] = defaultdict (set )
1111 deps_counter : Counter [int ] = Counter ()
12+ name_to_path : dict [str , Path ] = {}
1213
1314 for package in extract_package_paths ():
1415 package_path = Path (package )
1516 if package_path .is_dir ():
1617 name = package_path .name
18+ name_to_path [name ] = package_path
1719 deps_counter [name ] = 0
1820 with open (package_path .joinpath ("pyproject.toml" ), "r" ) as f :
1921 pyproject = tomlkit .load (f )
@@ -23,22 +25,22 @@ def build_dependency_graph():
2325 dependent_graph [dep ].add (name )
2426 deps_counter [name ] += 1
2527
26- return dependent_graph , deps_counter
28+ return dependent_graph , deps_counter , name_to_path
2729
2830
29- def topological_order (graph : dict [str , set [str ]], counter : dict [str , int ]) -> Generator [str , None , None ]:
31+ def topological_order (graph : dict [str , set [str ]], counter : dict [str , int ], name_to_path : dict [ str , Path ] ) -> Generator [Path , None , None ]:
3032 while counter :
3133 for dep in list (counter .keys ()):
3234 if counter [dep ] == 0 :
33- yield dep
35+ yield name_to_path [ dep ]
3436 for dependent in graph [dep ]:
3537 counter [dependent ] -= 1
3638 del counter [dep ]
3739
3840
39- def package_build_order () -> Generator [str , None , None ]:
40- graph , counter = build_dependency_graph ()
41- return topological_order (graph , counter )
41+ def package_build_order () -> Generator [Path , None , None ]:
42+ graph , counter , name_to_path = build_dependency_graph ()
43+ return topological_order (graph , counter , name_to_path )
4244
4345
4446if __name__ == "__main__" :
0 commit comments