Skip to main content

A collection of utility libraries for database, HTTP, Kafka, logging, config and utils

Project description

Python Utilities Library

Набор готовых решений и утилит для быстрого старта Python проектов. Библиотека включает модули для работы с конфигурацией, базами данных, Kafka, HTTP-запросами, логированием и другими часто используемыми функциями.

Быстрый старт

Установка зависимостей

pip install -r iflib-tools

Базовая настройка

from iflib_tools import config_manager
from iflib_tools import AppLogger

# Загрузка конфигурации
config_manager.load_from_dict({
    'application': {
        'name': 'MyApp',
        'env': 'development',
        'logger': {'level': 'DEBUG'}
    },
    'database': {
        'host': 'localhost',
        'port': 5432,
        'database': 'myapp',
        'user': 'postgres',
        'password': 'password'
    }
})

# Инициализация логгера
app_logger = AppLogger(name=config_manager.config.application.name)
app_logger.info("Приложение запущено")

Структура проекта

lib/
├── config/          # Управление конфигурацией
├── database/        # Работа с базами данных (PostgreSQL, MSSQL)
├── http/            # HTTP клиент с retry логикой
├── kafka/           # Producer/Consumer для Apache Kafka
├── logger/          # Настройка логирования
└── utils/           # Вспомогательные утилиты
main.py              # Главный файл
... дальще ваши файлы проекта

Модули

  1. Конфигурация (lib.config) Гибкая система конфигурации с поддержкой YAML, env переменных и маскировкой чувствительных данных.
from iflib_tools import config_manager

# Загрузка из YAML
config_manager.load_from_yaml("config.yaml")

# Загрузка из словаря
config_manager.load_from_dict({
    'application': {'name': 'TestApp', 'env': 'test'},
    'database': {
        'host': 'localhost', 
        'port': 5432,
        'database': 'test',
        'user': 'user',
        'password': 'pass'
    }
})

# Использование
db_config = config_manager.config.database
connection_string = db_config.get_connection_string(masked=False)

# Получение значений по пути
log_level = config_manager.get('application.logger.level', 'INFO')

Пример YAML конфигурации:

application:
  name: "My Application"
  env: "development"
  logger:
    level: "DEBUG"
    format: "simple"

server:
  url: "https://api.example.com"
  endpoint: "/api/v1"

database:
  host: "localhost"
  port: 5432
  database: "myapp"
  user: "postgres"
  password: "password"

databases:
  analytics:
    host: "analytics-db.example.com"
    port: 5432
    database: "analytics"
    user: "analytics_user"
    password: "analytics_password"

Логирование (lib.logger)

Мощная система логирования с маскировкой чувствительных данных и структурированным выводом.

from iflib_tools import LoggerSetup, AppLogger

# Настройка логгера
log_setup = LoggerSetup(level="DEBUG", enable_file_logging=True)

# Создание логгера приложения
app_logger = AppLogger(name="MyApp", component="main")

# Использование
app_logger.info("Запуск процесса", step="initialization")
app_logger.error("Ошибка обработки", error=exception, data_count=100)
app_logger.debug("Отладочная информация", query=sql_query, params=params)

Особенности:

  • Автоматическая маскировка паролей и токенов
  • Поддержка структурированных данных
  • Цветной вывод в консоль
  • Ротация лог-файлов

Базы данных (lib.database)

Универсальный обработчик для PostgreSQL и MSSQL с поддержкой пулинга соединений.

from iflib_tools import db_manager, Database

# Добавление базы данных
db = db_manager.add_database(
    name="main",
    connection_string="postgresql://user:pass@host:5432/db",
    db_type="postgresql",
    set_default=True
)

# Выполнение запросов
result = db.exec("SELECT * FROM users WHERE age > :age", {"age": 18})

if result.success:
    for user in result.data:
        print(user['name'])

# Использование контекстного менеджера
with db.session() as session:
    # Работа с сессией
    pass

# Вставка данных
insert_result = db.insert("users", {"name": "John", "age": 25}, return_id=True)
if insert_result.success:
    print(f"Создан пользователь с ID: {insert_result.data['id']}")

Поддерживаемые СУБД:

PostgreSQL
Microsoft SQL Server
Автоопределение типа БД

HTTP клиент (lib.http)

HTTP клиент с retry логикой, таймаутами и подробным логированием.

from iflib_tools import HttpManager

# Создание менеджера
http_manager = HttpManager()
client = http_manager.get_client(
    base_url="https://api.example.com",
    timeout=30,
    max_retries=3
)

# Выполнение запросов
response = client.get("/users", params={"active": True})

if response and response.status_code == 200:
    data = response.json()
    print(f"Получено {len(data)} пользователей")

# POST запрос с данными
client.post("/users", json={"name": "John", "email": "john@example.com"})

# Получение статистики
stats = client.get_stats()
print(f"Успешных запросов: {stats['success_rate']}%")

Kafka (lib.kafka)

Производитель и потребитель для Apache Kafka с управлением соединениями.

from iflib_tools import KafkaManager

# Создание менеджера
kafka_manager = KafkaManager(bootstrap_servers="localhost:9092")

# Отправка сообщений
producer = kafka_manager.get_producer("test-topic")
success = producer.send({"event": "user_created", "user_id": 123})

# Чтение сообщений
consumer = kafka_manager.get_consumer(
    "test-topic", 
    group_id="my-group",
    auto_offset_reset="earliest"
)

for message in consumer.consume():
    if message:
        print(f"Получено сообщение: {message}")

# Использование менеджера для упрощенной отправки
kafka_manager.send_message("test-topic", {"key": "value"})

Утилиты (lib.utils)

Набор полезных утилит для работы с данными.

from iflib_tools import data_utils, validation_utils, format_utils

# Работа с данными
chunks = list(data_utils.chunker([1, 2, 3, 4, 5], chunk_size=2))
# [[1, 2], [3, 4], [5]]

dates = data_utils.date_range("2024-01-01", "2024-01-05")
# [datetime(2024, 1, 1), ..., datetime(2024, 1, 5)]

# Валидация
is_valid = validation_utils.is_valid_email("test@example.com")
is_phone_valid = validation_utils.is_valid_phone("+79161234567")

# Форматирование
size_str = format_utils.format_bytes(1024 * 1024)  # "1.00 MB"
duration_str = format_utils.format_duration(125.5)  # "2m 5s"

Тестирование

В проекте предусмотрены интеграционные тесты для проверки совместимости модулей:

python test_compability.py

Тесты проверяют:

  • Интеграцию конфигурации и логирования
  • Работу с базами данных
  • HTTP запросы
  • Kafka producers/consumers
  • Вспомогательные утилиты

Пример полного workflow

from iflib_tools import config_manager
from iflib_tools import AppLogger
from iflib_tools import db_manager
from iflib_tools import HttpManager
from iflib_tools import KafkaManager

class MyApplication:
    def __init__(self):
        self.logger = AppLogger(name="MyApp")
        
        # Загрузка конфигурации
        config_manager.load_from_yaml("config.yaml")
        
        # Инициализация базы данных
        db_config = config_manager.config.database
        db_manager.add_database(
            "main",
            db_config.get_connection_string(),
            set_default=True
        )
        
        # HTTP клиент для внешнего API
        self.http_client = HttpManager().get_client(
            base_url=config_manager.config.server.url
        )
        
        # Kafka для событий
        self.kafka_manager = KafkaManager(
            bootstrap_servers="kafka:9092"
        )
    
    def process_data(self):
        self.logger.info("Начало обработки данных")
        
        # Получение данных из БД
        result = db_manager.query("SELECT * FROM tasks WHERE status = 'pending'")
        
        for task in result.data:
            try:
                # Обработка задачи
                response = self.http_client.post("/process", json=task)
                
                # Отправка события в Kafka
                self.kafka_manager.send_message(
                    "task-events",
                    {"task_id": task['id'], "status": "processed"}
                )
                
                self.logger.info("Задача обработана", task_id=task['id'])
                
            except Exception as e:
                self.logger.error("Ошибка обработки задачи", 
                                error=e, task_id=task['id'])

if __name__ == "__main__":
    app = MyApplication()
    app.process_data()

Настройки окружения Проект поддерживает переопределение настроек через переменные окружения:

export DB_HOST=localhost
export DB_PORT=5432
export DB_USER=postgres
export DB_PASSWORD=secret
export LOG_LEVEL=DEBUG
export SERVER_URL=https://api.example.com

Мониторинг и метрики Каждый модуль предоставляет статистику работы:

# Статистика HTTP запросов
http_stats = http_client.get_stats()

# Статистика Kafka producer
kafka_stats = producer.get_stats()

# Статистика менеджера БД
db_stats = db_manager.get_stats()

Безопасность

  • Автоматическая маскировка чувствительных данных в логах
  • Экранирование специальных символов в connection strings
  • Валидация входных данных
  • Безопасная обработка ошибок
  • Совместимость
  • Python 3.8+
  • PostgreSQL 12+
  • MSSQL 2016+
  • Apache Kafka 2.5+

Установка

pip install iflib-tools

Лицензия

MIT License - свободное использование и модификация.

Примечание: Это библиотека готовых решений, предназначенная для быстрого старта проектов. Каждый модуль можно использовать независимо или в комбинации с другими.

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

iflib_tools-0.1.8.tar.gz (34.5 kB view details)

Uploaded Source

Built Distribution

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

iflib_tools-0.1.8-py3-none-any.whl (34.9 kB view details)

Uploaded Python 3

File details

Details for the file iflib_tools-0.1.8.tar.gz.

File metadata

  • Download URL: iflib_tools-0.1.8.tar.gz
  • Upload date:
  • Size: 34.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for iflib_tools-0.1.8.tar.gz
Algorithm Hash digest
SHA256 361f684736f3731da0d6709e8812a2fdd292cbddababc2c203ff52a3b02790b4
MD5 914b7e9c1ff92e1614f5b3c75921f094
BLAKE2b-256 8a4b6099c7843772e6bdd3ca7b630346cc14c43201ad3420d5e56a690bb15c7c

See more details on using hashes here.

File details

Details for the file iflib_tools-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: iflib_tools-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 34.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for iflib_tools-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 ef01fc05247c6fa74638e5687f79a08c93e6f412ecfbb35c64cf5619a3d3d08f
MD5 a2260ae47fa1181406adf4fad34e1544
BLAKE2b-256 76c24c1bddaec8ac5bdadc144ef88c8ad0efdb88de75d76e553342a6f12ff079

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