Spaces:
Running
Running
"""Environment variable loader utility. | |
This module provides functionality to load environment variables from a .env file | |
in non-production environments. In production, environment variables should be | |
set through the system/platform instead of using .env files for security reasons. | |
Uses python-dotenv for loading environment variables from .env files. | |
""" | |
import os | |
from typing import Optional | |
# Import python-dotenv | |
from dotenv import dotenv_values | |
from dotenv import find_dotenv as dotenv_find_dotenv | |
from dotenv import load_dotenv as dotenv_load_dotenv | |
from starfish.common.logger import get_logger | |
logger = get_logger(__name__) | |
def load_env_file(env_path: Optional[str] = None, override: bool = False) -> bool: | |
"""Load environment variables from .env file for non-production environments. | |
Args: | |
env_path: Path to the .env file. If None, looks for .env file in the current | |
working directory and parent directories. | |
override: Whether to override existing environment variables. Default is False. | |
Returns: | |
True if environment variables were loaded, False otherwise. | |
""" | |
# Skip loading in production environments | |
if os.getenv("ENV") == "PROD": | |
logger.info("Production environment detected. Skipping .env file loading.") | |
# Find the .env file if path not provided | |
if env_path is None: | |
env_path = dotenv_find_dotenv(usecwd=True) | |
if not env_path: | |
logger.warning("No .env file found in the current or parent directories.") | |
# Load environment variables | |
loaded = dotenv_load_dotenv(dotenv_path=env_path, override=override) | |
if loaded: | |
# Get the loaded variables to count and log them | |
loaded_vars = dotenv_values(env_path) | |
logger.debug(f"Loaded {len(loaded_vars)} environment variables from {env_path}") | |
else: | |
logger.warning(f"Failed to load environment variables from {env_path}") | |