No project description provided
Project description
chutils
Набор простых и удобных утилит для Python, который избавляет от рутины при работе с конфигурацией, логированием и секретами в новых проектах.
Проблема
Каждый раз, начиная новый проект, приходится решать одни и те же задачи:
- Как удобно читать настройки из файла конфигурации?
- Как настроить логирование, чтобы сообщения писались и в консоль, и в файл с ежедневной ротацией?
- Как безопасно хранить API-ключи и пароли, не записывая их в код или в файлы конфигурации?
- Как сделать так, чтобы все это работало без жестко прописанных путей сразу после установки?
chutils решает эти проблемы.
Ключевые возможности
- ✨ Ноль конфигурации: Библиотека автоматически находит корень вашего проекта и файл конфигурации (
config.ymlилиconfig.ini). - ⚙️ Гибкая конфигурация: Поддержка
YAMLиINIформатов. Простые функции для получения типизированных данных. - ✍️ Продвинутый логгер: Функция
setup_logger()"из коробки" настраивает логирование в консоль и в ротируемые файлы. Возвращает кастомный логгер с дополнительными уровнями отладки (devdebug,mediumdebug). - 🔒 Безопасное хранилище секретов: Модуль
secret_managerпредоставляет простой интерфейс для сохранения и получения секретов через системное хранилище ключей (Keyring). - 🚀 Готовность к работе: Просто установите и используйте.
Установка
poetry add chutils
Или с помощью pip:
pip install chutils
Для разработки клонируйте репозиторий и установите его в режиме редактирования:
git clone https://github.com/Chu4hel/chutils.git
cd chutils
pip install -e .
Быстрый старт
-
Создайте в корне вашего проекта файл
config.yml.Структура проекта:
my_awesome_app/ ├── main.py └── config.ymlСодержимое
config.yml:API: base_url: https://api.example.com Database: host: localhost port: 5432 user: my_user
-
Используйте
chutilsв вашем кодеmain.py:# main.py from chutils import get_config_value, setup_logger, SecretManager, ChutilsLogger # 1. Настраиваем логгер. Он автоматически прочитает настройки из конфига. logger: ChutilsLogger = setup_logger() # 2. Инициализируем менеджер секретов для нашего приложения. secrets = SecretManager("my_awesome_app") def setup_credentials(): """Функция для первоначального сохранения пароля.""" db_user = get_config_value("Database", "user") if not secrets.get_secret(f"{db_user}_password"): logger.info("Пароль для БД не найден. Сохраняем новый пароль...") secrets.save_secret(f"{db_user}_password", "MySuperSecretDbPassword123!") logger.info("Пароль для БД сохранен в системном хранилище.") def connect_to_db(): # 3. Легко получаем значения из конфига и секреты из хранилища. db_host = get_config_value("Database", "host") db_user = get_config_value("Database", "user") db_password = secrets.get_secret(f"{db_user}_password") if not db_password: logger.error("Не удалось получить пароль для БД!") return logger.info(f"Подключаемся к базе данных по адресу {db_host} от имени {db_user}...") # ... логика подключения ... logger.info("Успешно подключились!") def main(): logger.info("Приложение запущено.") setup_credentials() connect_to_db() logger.info("Приложение завершило работу.") if __name__ == "__main__": main()
-
Запустите ваш скрипт. Вы увидите логи в консоли, а в проекте появится папка
logsс файлом лога. Пароль от БД будет надежно сохранен в системном хранилище.
API и Использование
Работа с конфигурацией (chutils.config)
get_config_value(section, key, fallback=""): Получить значение.get_config_int(section, key, fallback=0): Получить целое число.get_config_boolean(section, key, fallback=False): Получить булево значение.get_config_list(section, key, fallback=[]): Получить список.get_config_section(section): Получить всю секцию как словарь.save_config_value(section, key, value): Сохранить значение. Важно: работает только для.iniфайлов для сохранения комментариев.
Настройка логирования (chutils.logger)
setup_logger(name='app_logger', log_level_str=''): Настраивает и возвращает экземплярChutilsLogger.logger.mediumdebug("message"): Логирование с уровнем 15.logger.devdebug("message"): Логирование с уровнем 9.
Управление секретами (chutils.secret_manager)
SecretManager(service_name): Создает менеджер, изолированный по имени сервиса.secrets.save_secret(key, value): Сохраняет секрет.secrets.get_secret(key): Получает секрет.secrets.delete_secret(key): Удаляет секрет.
Ручная инициализация (chutils.init)
В 99% случаев вам это не понадобится. Но если автоматика не справилась, вы можете один раз указать путь к проекту вручную:
import chutils
chutils.init(base_dir="/path/to/my/project/root")
Пример файла config.yml
chutils использует секцию Logging для настройки логгера.
API:
token: your_secret_token_here
Database:
host: localhost
Logging:
# Уровни: DEVDEBUG, DEBUG, MEDIUMDEBUG, INFO, WARNING, ERROR, CRITICAL
log_level: DEBUG
# Имя файла для логов
log_file_name: my_app.log
# Сколько дней хранить файлы логов
log_backup_count: 7
Лицензия
Проект распространяется под лицензией MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chutils-2.0.0.tar.gz.
File metadata
- Download URL: chutils-2.0.0.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.13.7 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be1ce7717ec241a687709e6f8d669250d65bb3273c95b1aab57fe7f7ee849d83
|
|
| MD5 |
682bec6b238c0de1df4d2e69d828dd4a
|
|
| BLAKE2b-256 |
6ffe72920e56aa7a49848a70b0f8f055e50a7d01829544f671919a50862fc12a
|
File details
Details for the file chutils-2.0.0-py3-none-any.whl.
File metadata
- Download URL: chutils-2.0.0-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.13.7 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
303160fedfe2b7f9faf2df08316f1544a63543b82cf422bb065bda7c55982825
|
|
| MD5 |
1cd82cb881ee6667092b93c3ff0526f8
|
|
| BLAKE2b-256 |
123203f26ea641a75da5768915baad0b225f67995c338a03c84d4a4ac096e1a0
|