Набор простых и удобных утилит для Python, который избавляет от рутины при работе с конфигурацией и логированием в новых проектах.
Project description
chutils: Рутина — в прошлом!
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 .
Примеры использования
В папке /examples вы найдете готовые к запуску скрипты, демонстрирующие ключевые возможности
библиотеки. Каждый пример сфокусирован на одной конкретной задаче.
Быстрый старт
1. Работа с конфигурацией
-
Создайте файл
config.ymlв корне вашего проекта:# config.yml Database: host: localhost port: 5432 user: my_user
-
Получайте значения в вашем коде:
# main.py from chutils import get_config_value, get_config_int db_host = get_config_value("Database", "host", fallback="127.0.0.1") db_port = get_config_int("Database", "port", fallback=5433) print(f"Подключаемся к БД по адресу: {db_host}:{db_port}") # Вывод: Подключаемся к БД по адресу: localhost:5432
chutilsавтоматически найдетconfig.ymlи прочитает из него данные.
2. Настройка логирования
-
Добавьте секцию
Loggingв вашconfig.yml(опционально):# config.yml Logging: log_level: DEBUG log_file_name: my_app.log
-
Используйте логгер:
# main.py from chutils import setup_logger, ChutilsLogger # Настраиваем логгер. Он сам прочитает настройки из конфига. logger: ChutilsLogger = setup_logger() logger.info("Приложение запущено.") logger.debug("Это отладочное сообщение.") # Вывод в консоли и запись в файл logs/my_app.log
Папка
logsбудет создана автоматически.
3. Управление секретами
-
Инициализируйте
SecretManagerи сохраните ваш секрет. Это нужно сделать один раз.# setup_secrets.py from chutils import SecretManager secrets = SecretManager("my_awesome_app") secrets.save_secret("db_password", "MySuperSecretDbPassword123!") print("Пароль от БД сохранен в системном хранилище!")
-
Получайте секрет в основном коде, не "светя" им:
# main.py from chutils import SecretManager, get_config_value secrets = SecretManager("my_awesome_app") db_user = get_config_value("Database", "user") # Получаем пароль из безопасного хранилища db_password = secrets.get_secret("db_password") if db_password: print(f"Получен пароль для пользователя {db_user}.") else: print("Пароль не найден!")
Комплексный пример
Этот пример показывает, как все компоненты chutils работают вместе.
-
Файл
config.yml:API: base_url: https://api.example.com Database: host: localhost port: 5432 user: my_user Logging: log_level: INFO
-
Код
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") password_key = f"{db_user}_password" if not secrets.get_secret(password_key): logger.info("Пароль для БД не найден. Сохраняем новый...") secrets.save_secret(password_key, "MySuperSecretDbPassword123!") logger.info("Пароль для БД сохранен в системном хранилище.") def connect_to_db(): """Пример подключения к БД с использованием конфига и секретов.""" 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()
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): Сохранить значение. Работает для.ymlи.ini. Важно: при сохранении в.ymlкомментарии и форматирование будут утеряны. При сохранении в.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")
Лицензия
Проект распространяется под лицензией 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.1.0.tar.gz.
File metadata
- Download URL: chutils-2.1.0.tar.gz
- Upload date:
- Size: 17.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.13.5 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96ae5b05574afd9ac82e72b257bdb0d741504a8cf4daa547d7fb309c197915a2
|
|
| MD5 |
e79cf9b1bfc424a8e48a3c5519dbf1ef
|
|
| BLAKE2b-256 |
4a1f0bff255fffb6254a8f9cd3173c2fe5702c04c36c3aea15329b4a6751d08e
|
File details
Details for the file chutils-2.1.0-py3-none-any.whl.
File metadata
- Download URL: chutils-2.1.0-py3-none-any.whl
- Upload date:
- Size: 18.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.13.5 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc7586a2745d81a038714e8fc5da11135519c2269a6300f8b75888ac71fdcaa9
|
|
| MD5 |
cd1a56e06dee9bea83896e3dbe99be4f
|
|
| BLAKE2b-256 |
fbab168b86dc06344d4539423fd14fa500ee29d542a8476b9e8508ea803b5499
|