Source code for chipiron.utils.path_variables

"""
Path utilities for the Chipiron project.

This module provides centralized path definitions to ensure consistent
path handling across the entire project.
"""

import os
from pathlib import Path

# Define the project root directory
# This file is at: chipiron/utils/path_variables.py
# So we go up 2 levels to reach project root
PROJECT_ROOT = Path(__file__).parents[2]  # Go up from chipiron/utils/ to project root

# Load .env file if it exists
env_file = PROJECT_ROOT / ".env"
if env_file.exists():
    with open(env_file, "r", encoding="utf-8") as f:
        for line in f:
            line = line.strip()
            if line and not line.startswith("#"):
                if "=" in line:
                    key, value = line.split("=", 1)
                    os.environ.setdefault(key, value)


[docs]def get_env_path(env_var: str, default: str) -> Path: """Get a path from environment variable or use default relative to PROJECT_ROOT.""" env_value = os.getenv(env_var, default) if os.path.isabs(env_value): return Path(env_value) return PROJECT_ROOT / env_value
# Common directory paths EXTERNAL_DATA_DIR = get_env_path("EXTERNAL_DATA_DIR", "external_data") LICHESS_PGN_DIR = get_env_path("LICHESS_PGN_DIR", "external_data/lichess_pgn") SYZYGY_TABLES_DIR = get_env_path("SYZYGY_TABLES_DIR", "external_data/syzygy-tables") STOCKFISH_DIR = get_env_path("STOCKFISH_DIR", "external_data/stockfish") GUI_DIR = get_env_path("GUI_DIR", "external_data/gui") SCRIPTS_DIR = PROJECT_ROOT / "chipiron" / "scripts" # Specific file paths LICHESS_PGN_FILE = get_env_path( "LICHESS_PGN_FILE", "external_data/lichess_pgn/lichess_db_standard_rated_2015-03.pgn", ) STOCKFISH_BINARY_PATH = get_env_path( "STOCKFISH_BINARY_PATH", "external_data/stockfish/stockfish/stockfish-ubuntu-x86-64-avx2", ) # MLflow paths (use environment variables with defaults) ML_FLOW_URI_PATH = os.getenv( "ML_FLOW_URI_PATH", f"sqlite:///{PROJECT_ROOT}/chipiron/scripts/default_output_folder/mlflow_data/mlruns.db", ) ML_FLOW_URI_PATH_TEST = os.getenv( "ML_FLOW_URI_PATH_TEST", f"sqlite:///{PROJECT_ROOT}/chipiron/scripts/default_output_folder/mlflow_data/mlruns_test.db", )
[docs]def main() -> None: """ Print all defined paths in absolute form for debugging and verification. """ print("Chipiron Project Paths (with .env integration):") print("=" * 50) print(f"PROJECT_ROOT: {PROJECT_ROOT.absolute()}") print() print("Directory Paths:") print(f"EXTERNAL_DATA_DIR: {EXTERNAL_DATA_DIR.absolute()}") print(f"LICHESS_PGN_DIR: {LICHESS_PGN_DIR.absolute()}") print(f"SYZYGY_TABLES_DIR: {SYZYGY_TABLES_DIR.absolute()}") print(f"STOCKFISH_DIR: {STOCKFISH_DIR.absolute()}") print(f"GUI_DIR: {GUI_DIR.absolute()}") print(f"SCRIPTS_DIR: {SCRIPTS_DIR.absolute()}") print() print("File Paths:") print(f"LICHESS_PGN_FILE: {LICHESS_PGN_FILE.absolute()}") print(f"STOCKFISH_BINARY_PATH: {STOCKFISH_BINARY_PATH.absolute()}") print() print("MLflow Paths:") print(f"ML_FLOW_URI_PATH: {ML_FLOW_URI_PATH}") print(f"ML_FLOW_URI_PATH_TEST: {ML_FLOW_URI_PATH_TEST}") print() print("Environment Variables Used:") env_vars = [ "EXTERNAL_DATA_DIR", "LICHESS_PGN_DIR", "SYZYGY_TABLES_DIR", "STOCKFISH_DIR", "GUI_DIR", "LICHESS_PGN_FILE", "STOCKFISH_BINARY_PATH", ] for var in env_vars: env_value = os.getenv(var, "NOT SET") print(f"{var}: {env_value}") print() print("Path Existence Check:") print(f"PROJECT_ROOT exists: {PROJECT_ROOT.exists()}") print(f"EXTERNAL_DATA_DIR exists: {EXTERNAL_DATA_DIR.exists()}") print(f"GUI_DIR exists: {GUI_DIR.exists()}") print(f"LICHESS_PGN_FILE exists: {LICHESS_PGN_FILE.exists()}")
if __name__ == "__main__": main()