Spaces:
Running
Running
""" | |
config.py | |
Global configuration and logger setup for the project. | |
Key Features: | |
- Loads environment variables | |
- Configures the logger for consistent logging across all modules. | |
- Dynamically sets the logging level based on the DEBUG environment variable. | |
""" | |
# Standard Library Imports | |
import atexit | |
import logging | |
import os | |
import shutil | |
# Third-Party Library Imports | |
from dotenv import load_dotenv | |
# Load environment variables | |
load_dotenv(override=True) | |
# Enable debugging mode based on an environment variable | |
debug_raw = os.getenv("DEBUG", "false").lower() | |
if debug_raw not in {"true", "false"}: | |
print(f'Warning: Invalid DEBUG value "{debug_raw}". Defaulting to "false".') | |
DEBUG = debug_raw == "true" | |
# Configure the logger | |
logging.basicConfig( | |
level=logging.DEBUG if DEBUG else logging.INFO, | |
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", | |
) | |
logger: logging.Logger = logging.getLogger("tts_arena") | |
logger.info(f'Debug mode is {"enabled" if DEBUG else "disabled"}.') | |
if DEBUG: | |
logger.debug(f"DEBUG mode enabled.") | |
# Define the directory for audio files relative to the project root | |
AUDIO_DIR = os.path.join(os.getcwd(), "static", "audio") | |
os.makedirs(AUDIO_DIR, exist_ok=True) | |
logger.info(f"Audio directory set to {AUDIO_DIR}") | |
def cleanup_audio_directory_contents() -> None: | |
""" | |
Delete all audio files within AUDIO_DIR, leaving the directory intact. | |
This function is intended to be registered to run when the application exits. | |
It assumes that AUDIO_DIR contains only audio files (or symbolic links), and no subdirectories. | |
""" | |
if not os.path.exists(AUDIO_DIR): | |
logger.info( | |
"Audio directory %s does not exist. Nothing to clean up.", AUDIO_DIR | |
) | |
return | |
# Use os.scandir for efficient directory iteration. | |
with os.scandir(AUDIO_DIR) as entries: | |
for entry in entries: | |
if entry.is_file() or entry.is_symlink(): | |
try: | |
os.unlink(entry.path) | |
logger.info("Deleted file: %s", entry.path) | |
except Exception as exc: | |
logger.error( | |
"Failed to delete file %s. Reason: %s", entry.path, exc | |
) | |
else: | |
logger.warning("Skipping non-file entry: %s", entry.path) | |
# Register the cleanup function to be called on normal program termination. | |
atexit.register(cleanup_audio_directory_contents) | |