53 lines
2.3 KiB
Python
53 lines
2.3 KiB
Python
"""Утилиты чтения переменных окружения с безопасным логированием."""
|
||
|
||
from __future__ import annotations
|
||
|
||
import logging
|
||
import os
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
def env_bool(name: str, default: bool = False) -> bool:
|
||
"""Получить булево значение из переменной окружения.
|
||
|
||
Args:
|
||
name (str): Имя переменной окружения.
|
||
default (bool): Значение по умолчанию, если переменная не установлена.
|
||
|
||
Returns:
|
||
bool: Значение переменной, интерпретированное как булево. Строка "true" (в любом регистре)
|
||
трактуется как True, остальные значения — как False.
|
||
"""
|
||
val = os.getenv(name)
|
||
if val is None:
|
||
if logger.isEnabledFor(logging.INFO):
|
||
logger.info(f"ENV {name} отсутствует; используется default={default}")
|
||
return default
|
||
result = val.lower() == "true"
|
||
if logger.isEnabledFor(logging.INFO):
|
||
logger.info(f"ENV {name} интерпретирован как bool={result}")
|
||
return result
|
||
|
||
|
||
def env_list(name: str, default: list[str] | None = None) -> list[str]:
|
||
"""Получить список строк из переменной окружения (разделитель — запятая).
|
||
|
||
Args:
|
||
name (str): Имя переменной окружения.
|
||
default (list[str] | None): Значение по умолчанию, если переменная пустая или отсутствует.
|
||
|
||
Returns:
|
||
list[str]: Список строк после split по запятой и trim пробелов. Пустые элементы исключаются.
|
||
"""
|
||
raw = os.getenv(name)
|
||
if not raw:
|
||
result = default or []
|
||
if logger.isEnabledFor(logging.INFO):
|
||
logger.info(f"ENV {name} пуст/отсутствует; список (len={len(result)}) из default")
|
||
return result
|
||
parts = [item.strip() for item in raw.split(",") if item.strip()]
|
||
if logger.isEnabledFor(logging.INFO):
|
||
logger.info(f"ENV {name} разобран как список (len={len(parts)})")
|
||
return parts
|