Skip to main content

Набор простых и удобных утилит для Python, который избавляет от рутины при работе с конфигурацией и логированием в новых проектах.

Project description

chutils: Рутина — в прошлом!

License: MIT Python PyPI version

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. Работа с конфигурацией

  1. Создайте файл config.yml в корне вашего проекта:

    # config.yml
    Database:
      host: localhost
      port: 5432
      user: my_user
    
  2. Получайте значения в вашем коде:

    # 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. Настройка логирования

  1. Добавьте секцию Logging в ваш config.yml (опционально):

    # config.yml
    Logging:
      log_level: DEBUG
      log_file_name: my_app.log
    
  2. Используйте логгер:

    # main.py
    from chutils import setup_logger, ChutilsLogger
    
    # Настраиваем логгер. Он сам прочитает настройки из конфига.
    logger: ChutilsLogger = setup_logger()
    
    logger.info("Приложение запущено.")
    logger.debug("Это отладочное сообщение.")
    # Вывод в консоли и запись в файл logs/my_app.log
    

    Папка logs будет создана автоматически.

3. Управление секретами

  1. Инициализируйте SecretManager и сохраните ваш секрет. Это нужно сделать один раз.

    # setup_secrets.py
    from chutils import SecretManager
    
    secrets = SecretManager("my_awesome_app")
    secrets.save_secret("db_password", "MySuperSecretDbPassword123!")
    print("Пароль от БД сохранен в системном хранилище!")
    
  2. Получайте секрет в основном коде, не "светя" им:

    # 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 работают вместе.

  1. Файл config.yml:

    API:
      base_url: https://api.example.com
    
    Database:
      host: localhost
      port: 5432
      user: my_user
    
    Logging:
      log_level: INFO
    
  2. Код 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chutils-2.1.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chutils-2.1.0-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

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

Hashes for chutils-2.1.0.tar.gz
Algorithm Hash digest
SHA256 96ae5b05574afd9ac82e72b257bdb0d741504a8cf4daa547d7fb309c197915a2
MD5 e79cf9b1bfc424a8e48a3c5519dbf1ef
BLAKE2b-256 4a1f0bff255fffb6254a8f9cd3173c2fe5702c04c36c3aea15329b4a6751d08e

See more details on using hashes here.

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

Hashes for chutils-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dc7586a2745d81a038714e8fc5da11135519c2269a6300f8b75888ac71fdcaa9
MD5 cd1a56e06dee9bea83896e3dbe99be4f
BLAKE2b-256 fbab168b86dc06344d4539423fd14fa500ee29d542a8476b9e8508ea803b5499

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page