2023-10-25 18:06:58 +00:00
|
|
|
from pathlib import Path
|
2023-10-27 00:01:31 +00:00
|
|
|
from typing import Optional, Set
|
2023-10-25 18:06:58 +00:00
|
|
|
|
|
|
|
|
|
|
|
def get_package_root(cwd: Optional[Path] = None) -> Path:
|
|
|
|
# traverse path for routes to host (any directory holding a pyproject.toml file)
|
|
|
|
package_root = Path.cwd() if cwd is None else cwd
|
|
|
|
visited: Set[Path] = set()
|
|
|
|
while package_root not in visited:
|
|
|
|
visited.add(package_root)
|
|
|
|
|
|
|
|
pyproject_path = package_root / "pyproject.toml"
|
|
|
|
if pyproject_path.exists():
|
|
|
|
return package_root
|
|
|
|
package_root = package_root.parent
|
|
|
|
raise FileNotFoundError("No pyproject.toml found")
|