Spaces:
Paused
Paused
| # src/rotator_library/utils/paths.py | |
| """ | |
| Centralized path management for the rotator library. | |
| Supports two runtime modes: | |
| 1. PyInstaller EXE -> files in the directory containing the executable | |
| 2. Script/Library -> files in the current working directory (overridable) | |
| Library users can override by passing `data_dir` to RotatingClient. | |
| """ | |
| import sys | |
| from pathlib import Path | |
| from typing import Optional, Union | |
| def get_default_root() -> Path: | |
| """ | |
| Get the default root directory for data files. | |
| - EXE mode (PyInstaller): directory containing the executable | |
| - Otherwise: current working directory | |
| Returns: | |
| Path to the root directory | |
| """ | |
| if getattr(sys, "frozen", False): | |
| # Running as PyInstaller bundle - use executable's directory | |
| return Path(sys.executable).parent | |
| # Running as script or library - use current working directory | |
| return Path.cwd() | |
| def get_logs_dir(root: Optional[Union[Path, str]] = None) -> Path: | |
| """ | |
| Get the logs directory, creating it if needed. | |
| Args: | |
| root: Optional root directory. If None, uses get_default_root(). | |
| Returns: | |
| Path to the logs directory | |
| """ | |
| base = Path(root) if root else get_default_root() | |
| logs_dir = base / "logs" | |
| logs_dir.mkdir(exist_ok=True) | |
| return logs_dir | |
| def get_cache_dir( | |
| root: Optional[Union[Path, str]] = None, subdir: Optional[str] = None | |
| ) -> Path: | |
| """ | |
| Get the cache directory, optionally with a subdirectory. | |
| Args: | |
| root: Optional root directory. If None, uses get_default_root(). | |
| subdir: Optional subdirectory name (e.g., "gemini_cli", "antigravity") | |
| Returns: | |
| Path to the cache directory (or subdirectory) | |
| """ | |
| base = Path(root) if root else get_default_root() | |
| cache_dir = base / "cache" | |
| if subdir: | |
| cache_dir = cache_dir / subdir | |
| cache_dir.mkdir(parents=True, exist_ok=True) | |
| return cache_dir | |
| def get_oauth_dir(root: Optional[Union[Path, str]] = None) -> Path: | |
| """ | |
| Get the OAuth credentials directory, creating it if needed. | |
| Args: | |
| root: Optional root directory. If None, uses get_default_root(). | |
| Returns: | |
| Path to the oauth_creds directory | |
| """ | |
| base = Path(root) if root else get_default_root() | |
| oauth_dir = base / "oauth_creds" | |
| oauth_dir.mkdir(exist_ok=True) | |
| return oauth_dir | |
| def get_data_file(filename: str, root: Optional[Union[Path, str]] = None) -> Path: | |
| """ | |
| Get the path to a data file in the root directory. | |
| Args: | |
| filename: Name of the file (e.g., "key_usage.json", ".env") | |
| root: Optional root directory. If None, uses get_default_root(). | |
| Returns: | |
| Path to the file (does not create the file) | |
| """ | |
| base = Path(root) if root else get_default_root() | |
| return base / filename | |