Исходный код EJIO.utils.config.validate

## /utils/config/validate.py

import types
from typing import Mapping, Any
from .err import RequirementsError

__all__ = [
    'isset',
    'require',
]


def _get_value(context: Any, key: str) -> Any:
    """Вспомогательная функция для извлечения значения из контекста."""
    if isinstance(context, (Mapping, dict)):
        return context.get(key)
    if isinstance(context, types.ModuleType):
        return getattr(context, key, None)
    return getattr(context, key, None) if hasattr(context, key) else None


[документация] def isset(context: Mapping[str, Any] | types.ModuleType, key: str) -> bool: """ Проверяет, существует ли переменная в переданном контексте и что её значение не равно None. Пример: if not isset(globals(), "DATABASE_URL"): print("Внимание: DATABASE_URL не настроена!") context = os.environ if isset(context, "PORT"): print(f"Приложение будет запущено на порту {context['PORT']}") :param context: Словарь или объект Mapping (например, os.environ или locals()) или модуль. :param key: Имя проверяемой переменной (ключ). :return: True, если ключ присутствует и значение не None, иначе False. """ return _get_value(context, key) is not None
[документация] def require[R]( context: Mapping[str, R] | types.ModuleType, key: str, error_message: str | None = None ) -> R: """ Проверяет наличие переменной в контексте. Если переменная отсутствует или равна None, генерирует исключение RequirementsError. Пример: try: api_token = require(globals(), "API_KEY", "Критическая ошибка: Без API_KEY приложение не запустится!") except RequirementsError as e: print(f"Ошибка инициализации: {e}") context = os.environ try: secret_key = require(context, "OS_SECRET_KEY") except RequirementsError as e: print(f"Старт заблокирован: {e}") :param context: Словарь или объект Mapping (например, os.environ или locals()) или модуль. :param key: Имя обязательной переменной. :param error_message: Кастомное сообщение об ошибке. :return: Значение переменной, если проверка успешна. :raises RequirementsError: Если переменная отсутствует или равна None. """ value = _get_value(context, key) if not value: msg = error_message or f"The required configuration variable '{key}' is not set or is None." raise RequirementsError(msg) return value