openrag/src/utils/paths.py
Eric Hare aa214624c9
Update src/utils/paths.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-12 08:29:45 -08:00

202 lines
5.5 KiB
Python

"""Centralized path management for OpenRAG.
This module provides functions to get standardized paths for OpenRAG files and directories.
All paths are centralized under ~/.openrag/ to avoid cluttering the user's current working directory.
"""
import os
from pathlib import Path
from utils.logging_config import get_logger
from utils.container_utils import detect_container_environment
logger = get_logger(__name__)
def get_openrag_home() -> Path:
"""Get the OpenRAG home directory.
In containers: Uses current working directory (for backward compatibility)
In local environments: Uses ~/.openrag/
Returns:
Path to OpenRAG home directory
"""
# In container environments, use the container's working directory
# This maintains backward compatibility with existing Docker setups
container_env = detect_container_environment()
if container_env:
# In containers, return the container's working directory.
# This ensures compatibility with existing Docker volume mounts,
# as Docker typically mounts volumes into the working directory.
return Path.cwd()
# In local environments, use centralized location
home_dir = Path.home() / ".openrag"
home_dir.mkdir(parents=True, exist_ok=True)
return home_dir
def get_config_dir() -> Path:
"""Get the configuration directory.
Returns:
Path to config directory (~/.openrag/config/ or ./config/ in containers)
"""
config_dir = get_openrag_home() / "config"
config_dir.mkdir(parents=True, exist_ok=True)
return config_dir
def get_config_file() -> Path:
"""Get the configuration file path.
Returns:
Path to config.yaml file
"""
return get_config_dir() / "config.yaml"
def get_keys_dir() -> Path:
"""Get the JWT keys directory.
Returns:
Path to keys directory (~/.openrag/keys/ or ./keys/ in containers)
"""
keys_dir = get_openrag_home() / "keys"
keys_dir.mkdir(parents=True, exist_ok=True)
return keys_dir
def get_private_key_path() -> Path:
"""Get the JWT private key path.
Returns:
Path to private_key.pem
"""
return get_keys_dir() / "private_key.pem"
def get_public_key_path() -> Path:
"""Get the JWT public key path.
Returns:
Path to public_key.pem
"""
return get_keys_dir() / "public_key.pem"
def get_documents_dir() -> Path:
"""Get the documents directory for default document ingestion.
In containers: Uses /app/openrag-documents (Docker volume mount)
In local environments: Uses ~/.openrag/documents/openrag-documents
Returns:
Path to documents directory
"""
container_env = detect_container_environment()
if container_env:
# In containers, use the Docker volume mount path
return Path("/app/openrag-documents")
# In local environments, use centralized location
documents_dir = get_openrag_home() / "documents" / "openrag-documents"
documents_dir.mkdir(parents=True, exist_ok=True)
return documents_dir
def get_flows_dir() -> Path:
"""Get the flows directory.
Returns:
Path to flows directory (~/.openrag/flows/ or ./flows/ in containers)
"""
flows_dir = get_openrag_home() / "flows"
flows_dir.mkdir(parents=True, exist_ok=True)
return flows_dir
def get_flows_backup_dir() -> Path:
"""Get the flows backup directory.
Returns:
Path to flows/backup directory
"""
backup_dir = get_flows_dir() / "backup"
backup_dir.mkdir(parents=True, exist_ok=True)
return backup_dir
def get_data_dir() -> Path:
"""Get the data directory.
Returns:
Path to data directory (~/.openrag/data/ or ./data/ in containers)
"""
data_dir = get_openrag_home() / "data"
data_dir.mkdir(parents=True, exist_ok=True)
return data_dir
def get_opensearch_data_dir() -> Path:
"""Get the OpenSearch data directory.
Returns:
Path to OpenSearch data directory
"""
return get_data_dir() / "opensearch-data"
def get_tui_dir() -> Path:
"""Get the TUI directory for TUI-specific files.
Returns:
Path to tui directory (~/.openrag/tui/ or ./tui/ in containers)
"""
tui_dir = get_openrag_home() / "tui"
tui_dir.mkdir(parents=True, exist_ok=True)
return tui_dir
def get_tui_env_file() -> Path:
"""Get the TUI .env file path.
Returns:
Path to .env file
"""
return get_tui_dir() / ".env"
def get_tui_compose_file(gpu: bool = False) -> Path:
"""Get the TUI docker-compose file path.
Args:
gpu: If True, returns path to docker-compose.gpu.yml
Returns:
Path to docker-compose file
"""
filename = "docker-compose.gpu.yml" if gpu else "docker-compose.yml"
return get_tui_dir() / filename
# Backward compatibility functions for migration
def get_legacy_paths() -> dict:
"""Get legacy (old) paths for migration purposes.
Returns:
Dictionary mapping resource names to their old paths
"""
cwd = Path.cwd()
return {
"config": cwd / "config" / "config.yaml",
"keys_dir": cwd / "keys",
"private_key": cwd / "keys" / "private_key.pem",
"public_key": cwd / "keys" / "public_key.pem",
"documents": cwd / "openrag-documents",
"flows": cwd / "flows",
"tui_env": cwd / ".env",
"tui_compose": cwd / "docker-compose.yml",
"tui_compose_gpu": cwd / "docker-compose.gpu.yml",
"opensearch_data": cwd / "opensearch-data",
}