emotion-fusion-api / utils /path_utils.py
cagedsheep's picture
Initial deploy: emotion fusion API with Docker
41e6846 verified
Raw
History Blame Contribute Delete
1.34 kB
from __future__ import annotations
import sys
from pathlib import Path
def find_project_root(start_path: Path | None = None) -> Path:
"""Find the emotion_fusion_demo project root from a file or directory.
A valid root contains app.py, config.py, and at least two of the core module
directories. If detection fails, return the current working directory with a
clear warning instead of raising.
"""
start = Path(start_path) if start_path is not None else Path.cwd()
try:
start = start.resolve()
except Exception:
start = Path.cwd().resolve()
if start.is_file():
start = start.parent
candidates = [start, *start.parents]
for candidate in candidates:
if _looks_like_project_root(candidate):
return candidate
print(
"Warning: 未能自动识别项目根目录,请确认你在 emotion_fusion_demo 项目目录中运行。",
file=sys.stderr,
)
return Path.cwd().resolve()
def _looks_like_project_root(path: Path) -> bool:
if not (path / "app.py").is_file():
return False
if not (path / "config.py").is_file():
return False
core_dirs = ["face_module", "ecg_module", "fusion"]
existing_count = sum(1 for dirname in core_dirs if (path / dirname).is_dir())
return existing_count >= 2