Исходный код 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