zach
Move env var validation util to config, refactor to fix linting errors across project
048c3fc
raw
history blame
2.59 kB
"""
config.py
Global configuration and logger setup for the project.
Key Features:
- Uses environment variables defined in the system (Docker in production).
- Loads a `.env` file only in development to simulate production variables locally.
- Configures the logger for consistent logging across all modules.
- Dynamically enables DEBUG logging in development and INFO logging in production (unless overridden).
"""
# Standard Library Imports
import logging
import os
from pathlib import Path
# Third-Party Library Imports
from dotenv import load_dotenv
# Determine the environment (defaults to "dev" if not explicitly set)
APP_ENV = os.getenv("APP_ENV", "dev").lower()
if APP_ENV not in {"dev", "prod"}:
APP_ENV = "dev"
# In development, load environment variables from .env file (not used in production)
if APP_ENV == "dev" and Path(".env").exists():
load_dotenv(".env", override=True)
# Enable debug mode if in development (or if explicitly set in env variables)
DEBUG = APP_ENV == "dev" or os.getenv("DEBUG", "false").lower() == "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'App running in "{APP_ENV}" mode.')
logger.info(f'Debug mode is {"enabled" if DEBUG else "disabled"}.')
if DEBUG:
logger.debug("DEBUG mode enabled.")
# Define the directory for audio files relative to the project root
AUDIO_DIR = Path.cwd() / "static" / "audio"
AUDIO_DIR.mkdir(parents=True, exist_ok=True)
logger.info(f"Audio directory set to {AUDIO_DIR}")
def validate_env_var(var_name: str) -> str:
"""
Validates that an environment variable is set and returns its value.
Args:
var_name (str): The name of the environment variable to validate.
Returns:
str: The value of the environment variable.
Raises:
ValueError: If the environment variable is not set.
Examples:
>>> import os
>>> os.environ["EXAMPLE_VAR"] = "example_value"
>>> validate_env_var("EXAMPLE_VAR")
'example_value'
>>> validate_env_var("MISSING_VAR")
Traceback (most recent call last):
...
ValueError: MISSING_VAR is not set. Please ensure it is defined in your environment variables.
"""
value = os.environ.get(var_name, "")
if not value:
raise ValueError(
f"{var_name} is not set. Please ensure it is defined in your environment variables."
)
return value