paths.py 1.3 KB

1234567891011121314151617181920212223242526272829303132
  1. """Shared path resolution for zhuce6."""
  2. from __future__ import annotations
  3. import os
  4. from pathlib import Path
  5. def _resolve_env_path(name: str, default: Path) -> Path:
  6. raw = str(os.getenv(name, "")).strip()
  7. return Path(raw).expanduser().resolve() if raw else default.expanduser().resolve()
  8. PROJECT_ROOT = _resolve_env_path("ZHUCE6_PROJECT_ROOT", Path(__file__).resolve().parents[1])
  9. CONFIG_DIR = _resolve_env_path("ZHUCE6_CONFIG_DIR", PROJECT_ROOT / "config")
  10. STATE_DIR = _resolve_env_path("ZHUCE6_STATE_DIR", PROJECT_ROOT / "state")
  11. LOG_DIR = _resolve_env_path("ZHUCE6_LOG_DIR", PROJECT_ROOT / "logs")
  12. DEFAULT_ENV_FILE = PROJECT_ROOT / ".env"
  13. DEFAULT_RUNTIME_STATE_FILE = STATE_DIR / "runtime_state.json"
  14. DEFAULT_ACCOUNT_SURVIVAL_STATE_FILE = STATE_DIR / "account_survival_tracker.json"
  15. DEFAULT_RESPONSES_SURVIVAL_STATE_FILE = STATE_DIR / "responses_survival_tracker.json"
  16. DEFAULT_CFMAIL_CONFIG_PATH = CONFIG_DIR / "cfmail_accounts.json"
  17. DEFAULT_DASHBOARD_LOG_FILE = LOG_DIR / "dashboard.log"
  18. DEFAULT_REGISTER_LOG_FILE = LOG_DIR / "register.log"
  19. def resolve_cfmail_config_path() -> Path:
  20. explicit = str(os.getenv("ZHUCE6_CFMAIL_CONFIG_PATH", "")).strip()
  21. if explicit:
  22. return Path(explicit).expanduser().resolve()
  23. return DEFAULT_CFMAIL_CONFIG_PATH