AI Hints & Edge Cases
Справочник для LLM по специфическим особенностям и "подводным камням" библиотеки chutils.
[!IMPORTANT] При написании кода и решении задач всегда обращайтесь к Банку few-shot примеров (
docs/ai_examples/). В нем представлены готовые пары правильных и ошибочных паттернов для обработки ошибок, конфигурации и логирования в контексте стандартовchutils.
1. Строгие правила (Strict Rules)
- Контекст логирования: Всегда используйте
bind_contextдля передачи сквозных идентификаторов (request_id, user_id). Не передавайте их вручную в каждое сообщение лога. - Секреты: Если вам нужно получить пароль, сначала проверьте его наличие через
SecretManager. Никогда не предлагайте пользователю записывать пароль вconfig.yml. - Типизация: При доступе к конфигу предпочитайте
get_config_int,get_config_booleanи т.д. вместо универсальногоget_config_valueс ручным приведением типов. - Строгий режим: Для критических параметров всегда передавайте параметр
required=Trueв геттеры (например,get_config_value("Database", "url", required=True)). Это позволит приложению упасть на старте (Fail-Fast) с ошибкойConfigKeyNotFoundErrorпри отсутствии настройки, вместо тихого продолжения работы со значениемNone/пустой строкой.
2. Пограничные случаи (Edge Cases)
Hot-Reload Конфигурации
Если включен start_config_watcher(), конфигурация обновляется в памяти автоматически при изменении файла.
- Внимание: Объекты, которые уже были созданы с использованием старых значений (например, соединения с БД), не
обновятся сами. Нужно использовать коллбэк
on_config_change.
Асинхронность
- Функции
aget_configиasave_config_valueявляются корутинами. При работе вasyncioокружении используйте их для избежания блокировки event loop при I/O операциях с диском.
Маскировка (Masking)
Логгер автоматически маскирует значения, ключи которых похожи на секреты (password, token, secret).
- Если вы выводите объект целиком (например,
logger.info(f"User data: {user_dict}")), убедитесь, что чувствительные поля не попадут в лог в открытом виде, если они не входят в стандартный список маскировки.
3. Распространенные ошибки
- Ошибка: Попытка импортировать из
chutils.config.core. - Правильно: Почти всё публичное API доступно напрямую из корня пакета:
from chutils import .... Используйте ленивый импорт из корня для чистоты кода.