inopyutils


Nameinopyutils JSON
Version 1.3.4 PyPI version JSON
download
home_pageNone
SummaryA comprehensive Python utility library for S3 storage, media processing, file management, configuration, and logging
upload_time2025-10-25 15:06:26
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords utilities s3 media file-management logging configuration
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # InoPyUtils

[![Python Version](https://img.shields.io/badge/python-3.9%2B-blue)](https://python.org)
[![Version](https://img.shields.io/badge/version-1.3.2-green)](https://pypi.org/project/inopyutils/)
[![License](https://img.shields.io/badge/license-MPL--2.0-orange)](LICENSE)
[![Development Status](https://img.shields.io/badge/status-beta-yellow)](https://pypi.org/project/inopyutils/)

A comprehensive Python utility library designed for modern development workflows, featuring S3-compatible storage operations, advanced JSON processing, media handling, file management, configuration management, and structured logging.

---

## 🚨 Important Notice

> **⚠️ Active Development**  
> This library is under active development and evolving rapidly. Built to satisfy specific use-cases, APIs may change without prior notice.
>
> **🔬 Beta Status**  
> Currently in **beta** stage. While functional, thorough testing is recommended before production use. Please review the code and test extensively for your specific requirements.
>
> **🤝 Community Welcome**  
> Contributions, feedback, and issue reports are actively encouraged. Help us make this library better for everyone!

---

## ✨ Key Features

### 🗄️ S3-Compatible Storage (`InoS3Helper`)
Universal cloud storage solution supporting **AWS S3**, **Backblaze B2**, **DigitalOcean Spaces**, **Wasabi**, **MinIO**, and other S3-compatible services.

**Features:**
- **Fully Async Operations** - Non-blocking upload/download operations
- **Smart Retry Logic** - Configurable exponential backoff retry mechanism
- **Flexible Authentication** - Access keys, environment variables, IAM roles
- **Advanced Operations** - Object listing, existence checking, deletion, metadata handling
- **Batch Operations** - Efficient bulk file operations

```python
from inopyutils import InoS3Helper

# Initialize with Backblaze B2
s3_client = InoS3Helper(
    aws_access_key_id='your_key_id',
    aws_secret_access_key='your_secret_key',
    endpoint_url='https://s3.us-west-004.backblazeb2.com',
    region_name='us-west-004',
    bucket_name='your-bucket',
    retries=5
)

# Async file operations
await s3_client.upload_file('local_file.txt', 'remote/path/file.txt')
await s3_client.download_file('remote/path/file.txt', 'downloaded_file.txt')

# Check file existence and get metadata
exists = await s3_client.file_exists('remote/path/file.txt')
objects = await s3_client.list_objects(prefix='remote/path/')
```

---

### 🔧 Advanced JSON Processing (`InoJsonHelper`)
Comprehensive JSON manipulation toolkit with both synchronous and asynchronous operations, perfect for configuration management and data processing.

**Features:**
- **Async/Sync File Operations** - Both synchronous and asynchronous file I/O
- **Deep Data Manipulation** - Merge, flatten, unflatten complex nested structures
- **Advanced Querying** - Safe path-based data retrieval and modification
- **Data Comparison** - Intelligent JSON structure comparison with detailed differences
- **Filtering & Cleaning** - Remove null values, filter keys, clean data structures
- **Array Search** - Find specific elements in complex nested arrays

```python
from inopyutils import InoJsonHelper

# String/Dict conversions with error handling
result = InoJsonHelper.string_to_dict('{"key": "value"}')
if result["success"]:
    data = result["data"]

# Async file operations
await InoJsonHelper.save_json_as_json_async({"config": "data"}, "config.json")
loaded = await InoJsonHelper.read_json_from_file_async("config.json")

# Deep operations
merged = InoJsonHelper.deep_merge(dict1, dict2)
flattened = InoJsonHelper.flatten({"a": {"b": {"c": 1}}})  # {"a.b.c": 1}
original = InoJsonHelper.unflatten({"a.b.c": 1})  # {"a": {"b": {"c": 1}}}

# Safe path operations
value = InoJsonHelper.safe_get(data, "user.profile.name", default="Unknown")
InoJsonHelper.safe_set(data, "user.profile.age", 25)

# Advanced filtering and searching
cleaned = InoJsonHelper.remove_null_values(data, remove_empty=True)
filtered = InoJsonHelper.filter_keys(data, ["name", "email"], deep=True)
found = InoJsonHelper.find_field_from_array(data, "id", "user_123")

# Data comparison with detailed diff
differences = InoJsonHelper.compare(old_data, new_data)
```

---

### 📁 File Management (`InoFileHelper`)
Robust file and folder operations with advanced features for batch processing, archiving, and media validation.

**Features:**
- **Smart Archiving** - ZIP compression/extraction with customizable settings
- **Batch Processing** - Automatic batch naming and file organization
- **Safe Operations** - Move, copy, remove with comprehensive safety checks
- **Media Validation** - Validate and convert image/video files with format support
- **Recursive Operations** - Deep folder analysis and processing

```python
from inopyutils import InoFileHelper
from pathlib import Path

# Create compressed archives
await InoFileHelper.zip(
    to_zip=Path("source_folder"),
    path_to_save=Path("archives"),
    zip_file_name="backup.zip",
    compression_level=6,
    include_root=False
)

# Batch file operations with smart naming
InoFileHelper.copy_files(
    from_path=Path("source"),
    to_path=Path("processed"),
    rename_files=True,
    prefix_name="Processed_",
    iterate_subfolders=True
)

# File analysis and utilities
file_count = InoFileHelper.count_files(Path("folder"), recursive=True)
latest_file = InoFileHelper.get_last_file(Path("folder"))
batch_name = InoFileHelper.increment_batch_name("Batch_001")  # "Batch_002"

# Media validation and conversion
await InoFileHelper.validate_files(
    input_path=Path("media_folder"),
    include_image=True,
    include_video=True,
    image_valid_exts=['.jpg', '.png', '.heic'],
    video_valid_exts=['.mp4', '.mov']
)
```

---

### 🎨 Media Processing (`InoMediaHelper`)
Professional-grade media processing with FFmpeg integration and Pillow-based image manipulation.

**Features:**
- **Video Processing** - FFmpeg-based conversion with resolution/FPS control
- **Image Processing** - Pillow-based validation, resizing, format conversion
- **HEIF/HEIC Support** - Native support for modern image formats
- **Quality Control** - Configurable compression and resolution limits
- **Batch Operations** - Process multiple files efficiently

```python
from inopyutils import InoMediaHelper
from pathlib import Path

# Advanced image processing
await InoMediaHelper.image_validate_pillow(
    input_path=Path("photo.heic"),
    output_path=Path("converted.jpg"),
    max_res=2048,
    jpg_quality=85,
    png_compress_level=6
)

# Video processing with quality control
await InoMediaHelper.video_convert_ffmpeg(
    input_path=Path("input.mov"),
    output_path=Path("optimized.mp4"),
    change_res=True,
    max_res=1920,
    change_fps=True,
    max_fps=30
)

# Media validation
is_valid_image = await InoMediaHelper.validate_image(Path("image.jpg"))
is_valid_video = await InoMediaHelper.validate_video(Path("video.mp4"))
```

---

### ⚙️ Configuration Management (`InoConfigHelper`)
Robust INI-based configuration management with type safety and debugging capabilities.

**Features:**
- **Type-Safe Operations** - Dedicated methods for different data types
- **Fallback Support** - Graceful handling of missing configuration values
- **Debug Logging** - Optional verbose logging for troubleshooting
- **Auto-Save** - Automatic persistence of configuration changes

```python
from inopyutils import InoConfigHelper

# Initialize with debug logging
config = InoConfigHelper('config/application.ini', debug=True)

# Type-safe configuration access
database_url = config.get('database', 'url', fallback='sqlite:///default.db')
debug_mode = config.get_bool('app', 'debug', fallback=False)
max_connections = config.get_int('database', 'max_connections', fallback=10)

# Configuration updates
config.set('api', 'endpoint', 'https://api.production.com')
config.set_bool('features', 'cache_enabled', True)
config.save()  # Explicit save (or auto-save if configured)
```

---

### 📝 Structured Logging (`InoLogHelper`)
Advanced logging system with automatic batching, categorization, and JSON-Lines format output.

**Features:**
- **JSONL Format** - Machine-readable structured logging
- **Automatic Batching** - Smart log rotation and batch management
- **Categorized Logging** - INFO, WARNING, ERROR categories with filtering
- **Rich Context** - Log arbitrary data structures with messages
- **Timestamped** - ISO format timestamps for precise tracking

```python
from inopyutils import InoLogHelper, LogCategory
from pathlib import Path

# Initialize logger with automatic batching
logger = InoLogHelper(Path("logs"), "MyApplication")

# Context-rich logging
logger.add(
    {"user_id": 12345, "action": "login", "ip": "192.168.1.100"}, 
    "User login successful"
)

# Categorized logging
logger.add(
    {"error_code": 500, "endpoint": "/api/users", "duration_ms": 1200}, 
    "API endpoint timeout", 
    LogCategory.ERROR
)

# Batch processing logs
logger.add(
    {"processed": 150, "failed": 3, "batch_id": "batch_20241009"}, 
    "Batch processing completed",
    LogCategory.INFO
)
```

---

## 🚀 Installation

### PyPI Installation (Recommended)
```bash
pip install inopyutils
```

### Development Installation
```bash
# Clone the repository
git clone https://github.com/nobandegani/InoPyUtils.git
cd InoPyUtils

# Install in development mode
pip install -e .

# Install with development dependencies
pip install -e ".[dev]"
```

### System Requirements
- **Python**: 3.9 or higher
- **Operating System**: Cross-platform (Windows, macOS, Linux)
- **Optional**: FFmpeg (for video processing features)

---

## 📦 Dependencies

### Core Dependencies
- **pillow** - Image processing and manipulation
- **pillow_heif** - HEIF/HEIC image format support
- **opencv-python** - Advanced video processing capabilities
- **aioboto3** - Asynchronous AWS S3 operations
- **aiofiles** - Asynchronous file I/O operations
- **botocore** - AWS core functionality and exception handling
- **inocloudreve** - Extended cloud storage integration

### Optional Dependencies
- **FFmpeg** - Required for video processing features (install separately)

---

## 🛠️ Development & Contributing

### Development Setup
```bash
# Clone and setup
git clone https://github.com/nobandegani/InoPyUtils.git
cd InoPyUtils

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install in development mode
pip install -e ".[dev]"

# Run tests
python -m pytest tests/
```

### Contributing Guidelines
1. **Fork** the repository
2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)
3. **Test** your changes thoroughly
4. **Commit** your changes (`git commit -m 'Add amazing feature'`)
5. **Push** to the branch (`git push origin feature/amazing-feature`)
6. **Open** a Pull Request

---

## 📊 Project Status

- **Current Version**: 1.1.3
- **Development Status**: Beta
- **Python Support**: 3.9+
- **License**: Mozilla Public License 2.0
- **Maintenance**: Actively maintained

---

## 📞 Support & Links

- **Homepage**: [https://github.com/nobandegani/InoPyUtils](https://github.com/nobandegani/InoPyUtils)
- **Issues**: [https://github.com/nobandegani/InoPyUtils/issues](https://github.com/nobandegani/InoPyUtils/issues)
- **PyPI**: [https://pypi.org/project/inopyutils/](https://pypi.org/project/inopyutils/)
- **Contact**: contact@inoland.net

---

## 📄 License

This project is licensed under the **Mozilla Public License 2.0** (MPL-2.0). See the [LICENSE](LICENSE) file for details.

---

## 🙏 Acknowledgments

Built with ❤️ by the Inoland. Special thanks to all contributors and the open-source community for their invaluable tools and libraries that make this project possible.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "inopyutils",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "utilities, s3, media, file-management, logging, configuration",
    "author": null,
    "author_email": "Inoland <contact@inoland.net>",
    "download_url": "https://files.pythonhosted.org/packages/25/32/a04d6149c3c9386937206cda0ed4fae306bd17d2290d4fee0c1bab310a73/inopyutils-1.3.4.tar.gz",
    "platform": null,
    "description": "# InoPyUtils\r\n\r\n[![Python Version](https://img.shields.io/badge/python-3.9%2B-blue)](https://python.org)\r\n[![Version](https://img.shields.io/badge/version-1.3.2-green)](https://pypi.org/project/inopyutils/)\r\n[![License](https://img.shields.io/badge/license-MPL--2.0-orange)](LICENSE)\r\n[![Development Status](https://img.shields.io/badge/status-beta-yellow)](https://pypi.org/project/inopyutils/)\r\n\r\nA comprehensive Python utility library designed for modern development workflows, featuring S3-compatible storage operations, advanced JSON processing, media handling, file management, configuration management, and structured logging.\r\n\r\n---\r\n\r\n## \ud83d\udea8 Important Notice\r\n\r\n> **\u26a0\ufe0f Active Development**  \r\n> This library is under active development and evolving rapidly. Built to satisfy specific use-cases, APIs may change without prior notice.\r\n>\r\n> **\ud83d\udd2c Beta Status**  \r\n> Currently in **beta** stage. While functional, thorough testing is recommended before production use. Please review the code and test extensively for your specific requirements.\r\n>\r\n> **\ud83e\udd1d Community Welcome**  \r\n> Contributions, feedback, and issue reports are actively encouraged. Help us make this library better for everyone!\r\n\r\n---\r\n\r\n## \u2728 Key Features\r\n\r\n### \ud83d\uddc4\ufe0f S3-Compatible Storage (`InoS3Helper`)\r\nUniversal cloud storage solution supporting **AWS S3**, **Backblaze B2**, **DigitalOcean Spaces**, **Wasabi**, **MinIO**, and other S3-compatible services.\r\n\r\n**Features:**\r\n- **Fully Async Operations** - Non-blocking upload/download operations\r\n- **Smart Retry Logic** - Configurable exponential backoff retry mechanism\r\n- **Flexible Authentication** - Access keys, environment variables, IAM roles\r\n- **Advanced Operations** - Object listing, existence checking, deletion, metadata handling\r\n- **Batch Operations** - Efficient bulk file operations\r\n\r\n```python\r\nfrom inopyutils import InoS3Helper\r\n\r\n# Initialize with Backblaze B2\r\ns3_client = InoS3Helper(\r\n    aws_access_key_id='your_key_id',\r\n    aws_secret_access_key='your_secret_key',\r\n    endpoint_url='https://s3.us-west-004.backblazeb2.com',\r\n    region_name='us-west-004',\r\n    bucket_name='your-bucket',\r\n    retries=5\r\n)\r\n\r\n# Async file operations\r\nawait s3_client.upload_file('local_file.txt', 'remote/path/file.txt')\r\nawait s3_client.download_file('remote/path/file.txt', 'downloaded_file.txt')\r\n\r\n# Check file existence and get metadata\r\nexists = await s3_client.file_exists('remote/path/file.txt')\r\nobjects = await s3_client.list_objects(prefix='remote/path/')\r\n```\r\n\r\n---\r\n\r\n### \ud83d\udd27 Advanced JSON Processing (`InoJsonHelper`)\r\nComprehensive JSON manipulation toolkit with both synchronous and asynchronous operations, perfect for configuration management and data processing.\r\n\r\n**Features:**\r\n- **Async/Sync File Operations** - Both synchronous and asynchronous file I/O\r\n- **Deep Data Manipulation** - Merge, flatten, unflatten complex nested structures\r\n- **Advanced Querying** - Safe path-based data retrieval and modification\r\n- **Data Comparison** - Intelligent JSON structure comparison with detailed differences\r\n- **Filtering & Cleaning** - Remove null values, filter keys, clean data structures\r\n- **Array Search** - Find specific elements in complex nested arrays\r\n\r\n```python\r\nfrom inopyutils import InoJsonHelper\r\n\r\n# String/Dict conversions with error handling\r\nresult = InoJsonHelper.string_to_dict('{\"key\": \"value\"}')\r\nif result[\"success\"]:\r\n    data = result[\"data\"]\r\n\r\n# Async file operations\r\nawait InoJsonHelper.save_json_as_json_async({\"config\": \"data\"}, \"config.json\")\r\nloaded = await InoJsonHelper.read_json_from_file_async(\"config.json\")\r\n\r\n# Deep operations\r\nmerged = InoJsonHelper.deep_merge(dict1, dict2)\r\nflattened = InoJsonHelper.flatten({\"a\": {\"b\": {\"c\": 1}}})  # {\"a.b.c\": 1}\r\noriginal = InoJsonHelper.unflatten({\"a.b.c\": 1})  # {\"a\": {\"b\": {\"c\": 1}}}\r\n\r\n# Safe path operations\r\nvalue = InoJsonHelper.safe_get(data, \"user.profile.name\", default=\"Unknown\")\r\nInoJsonHelper.safe_set(data, \"user.profile.age\", 25)\r\n\r\n# Advanced filtering and searching\r\ncleaned = InoJsonHelper.remove_null_values(data, remove_empty=True)\r\nfiltered = InoJsonHelper.filter_keys(data, [\"name\", \"email\"], deep=True)\r\nfound = InoJsonHelper.find_field_from_array(data, \"id\", \"user_123\")\r\n\r\n# Data comparison with detailed diff\r\ndifferences = InoJsonHelper.compare(old_data, new_data)\r\n```\r\n\r\n---\r\n\r\n### \ud83d\udcc1 File Management (`InoFileHelper`)\r\nRobust file and folder operations with advanced features for batch processing, archiving, and media validation.\r\n\r\n**Features:**\r\n- **Smart Archiving** - ZIP compression/extraction with customizable settings\r\n- **Batch Processing** - Automatic batch naming and file organization\r\n- **Safe Operations** - Move, copy, remove with comprehensive safety checks\r\n- **Media Validation** - Validate and convert image/video files with format support\r\n- **Recursive Operations** - Deep folder analysis and processing\r\n\r\n```python\r\nfrom inopyutils import InoFileHelper\r\nfrom pathlib import Path\r\n\r\n# Create compressed archives\r\nawait InoFileHelper.zip(\r\n    to_zip=Path(\"source_folder\"),\r\n    path_to_save=Path(\"archives\"),\r\n    zip_file_name=\"backup.zip\",\r\n    compression_level=6,\r\n    include_root=False\r\n)\r\n\r\n# Batch file operations with smart naming\r\nInoFileHelper.copy_files(\r\n    from_path=Path(\"source\"),\r\n    to_path=Path(\"processed\"),\r\n    rename_files=True,\r\n    prefix_name=\"Processed_\",\r\n    iterate_subfolders=True\r\n)\r\n\r\n# File analysis and utilities\r\nfile_count = InoFileHelper.count_files(Path(\"folder\"), recursive=True)\r\nlatest_file = InoFileHelper.get_last_file(Path(\"folder\"))\r\nbatch_name = InoFileHelper.increment_batch_name(\"Batch_001\")  # \"Batch_002\"\r\n\r\n# Media validation and conversion\r\nawait InoFileHelper.validate_files(\r\n    input_path=Path(\"media_folder\"),\r\n    include_image=True,\r\n    include_video=True,\r\n    image_valid_exts=['.jpg', '.png', '.heic'],\r\n    video_valid_exts=['.mp4', '.mov']\r\n)\r\n```\r\n\r\n---\r\n\r\n### \ud83c\udfa8 Media Processing (`InoMediaHelper`)\r\nProfessional-grade media processing with FFmpeg integration and Pillow-based image manipulation.\r\n\r\n**Features:**\r\n- **Video Processing** - FFmpeg-based conversion with resolution/FPS control\r\n- **Image Processing** - Pillow-based validation, resizing, format conversion\r\n- **HEIF/HEIC Support** - Native support for modern image formats\r\n- **Quality Control** - Configurable compression and resolution limits\r\n- **Batch Operations** - Process multiple files efficiently\r\n\r\n```python\r\nfrom inopyutils import InoMediaHelper\r\nfrom pathlib import Path\r\n\r\n# Advanced image processing\r\nawait InoMediaHelper.image_validate_pillow(\r\n    input_path=Path(\"photo.heic\"),\r\n    output_path=Path(\"converted.jpg\"),\r\n    max_res=2048,\r\n    jpg_quality=85,\r\n    png_compress_level=6\r\n)\r\n\r\n# Video processing with quality control\r\nawait InoMediaHelper.video_convert_ffmpeg(\r\n    input_path=Path(\"input.mov\"),\r\n    output_path=Path(\"optimized.mp4\"),\r\n    change_res=True,\r\n    max_res=1920,\r\n    change_fps=True,\r\n    max_fps=30\r\n)\r\n\r\n# Media validation\r\nis_valid_image = await InoMediaHelper.validate_image(Path(\"image.jpg\"))\r\nis_valid_video = await InoMediaHelper.validate_video(Path(\"video.mp4\"))\r\n```\r\n\r\n---\r\n\r\n### \u2699\ufe0f Configuration Management (`InoConfigHelper`)\r\nRobust INI-based configuration management with type safety and debugging capabilities.\r\n\r\n**Features:**\r\n- **Type-Safe Operations** - Dedicated methods for different data types\r\n- **Fallback Support** - Graceful handling of missing configuration values\r\n- **Debug Logging** - Optional verbose logging for troubleshooting\r\n- **Auto-Save** - Automatic persistence of configuration changes\r\n\r\n```python\r\nfrom inopyutils import InoConfigHelper\r\n\r\n# Initialize with debug logging\r\nconfig = InoConfigHelper('config/application.ini', debug=True)\r\n\r\n# Type-safe configuration access\r\ndatabase_url = config.get('database', 'url', fallback='sqlite:///default.db')\r\ndebug_mode = config.get_bool('app', 'debug', fallback=False)\r\nmax_connections = config.get_int('database', 'max_connections', fallback=10)\r\n\r\n# Configuration updates\r\nconfig.set('api', 'endpoint', 'https://api.production.com')\r\nconfig.set_bool('features', 'cache_enabled', True)\r\nconfig.save()  # Explicit save (or auto-save if configured)\r\n```\r\n\r\n---\r\n\r\n### \ud83d\udcdd Structured Logging (`InoLogHelper`)\r\nAdvanced logging system with automatic batching, categorization, and JSON-Lines format output.\r\n\r\n**Features:**\r\n- **JSONL Format** - Machine-readable structured logging\r\n- **Automatic Batching** - Smart log rotation and batch management\r\n- **Categorized Logging** - INFO, WARNING, ERROR categories with filtering\r\n- **Rich Context** - Log arbitrary data structures with messages\r\n- **Timestamped** - ISO format timestamps for precise tracking\r\n\r\n```python\r\nfrom inopyutils import InoLogHelper, LogCategory\r\nfrom pathlib import Path\r\n\r\n# Initialize logger with automatic batching\r\nlogger = InoLogHelper(Path(\"logs\"), \"MyApplication\")\r\n\r\n# Context-rich logging\r\nlogger.add(\r\n    {\"user_id\": 12345, \"action\": \"login\", \"ip\": \"192.168.1.100\"}, \r\n    \"User login successful\"\r\n)\r\n\r\n# Categorized logging\r\nlogger.add(\r\n    {\"error_code\": 500, \"endpoint\": \"/api/users\", \"duration_ms\": 1200}, \r\n    \"API endpoint timeout\", \r\n    LogCategory.ERROR\r\n)\r\n\r\n# Batch processing logs\r\nlogger.add(\r\n    {\"processed\": 150, \"failed\": 3, \"batch_id\": \"batch_20241009\"}, \r\n    \"Batch processing completed\",\r\n    LogCategory.INFO\r\n)\r\n```\r\n\r\n---\r\n\r\n## \ud83d\ude80 Installation\r\n\r\n### PyPI Installation (Recommended)\r\n```bash\r\npip install inopyutils\r\n```\r\n\r\n### Development Installation\r\n```bash\r\n# Clone the repository\r\ngit clone https://github.com/nobandegani/InoPyUtils.git\r\ncd InoPyUtils\r\n\r\n# Install in development mode\r\npip install -e .\r\n\r\n# Install with development dependencies\r\npip install -e \".[dev]\"\r\n```\r\n\r\n### System Requirements\r\n- **Python**: 3.9 or higher\r\n- **Operating System**: Cross-platform (Windows, macOS, Linux)\r\n- **Optional**: FFmpeg (for video processing features)\r\n\r\n---\r\n\r\n## \ud83d\udce6 Dependencies\r\n\r\n### Core Dependencies\r\n- **pillow** - Image processing and manipulation\r\n- **pillow_heif** - HEIF/HEIC image format support\r\n- **opencv-python** - Advanced video processing capabilities\r\n- **aioboto3** - Asynchronous AWS S3 operations\r\n- **aiofiles** - Asynchronous file I/O operations\r\n- **botocore** - AWS core functionality and exception handling\r\n- **inocloudreve** - Extended cloud storage integration\r\n\r\n### Optional Dependencies\r\n- **FFmpeg** - Required for video processing features (install separately)\r\n\r\n---\r\n\r\n## \ud83d\udee0\ufe0f Development & Contributing\r\n\r\n### Development Setup\r\n```bash\r\n# Clone and setup\r\ngit clone https://github.com/nobandegani/InoPyUtils.git\r\ncd InoPyUtils\r\n\r\n# Create virtual environment\r\npython -m venv venv\r\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\r\n\r\n# Install in development mode\r\npip install -e \".[dev]\"\r\n\r\n# Run tests\r\npython -m pytest tests/\r\n```\r\n\r\n### Contributing Guidelines\r\n1. **Fork** the repository\r\n2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)\r\n3. **Test** your changes thoroughly\r\n4. **Commit** your changes (`git commit -m 'Add amazing feature'`)\r\n5. **Push** to the branch (`git push origin feature/amazing-feature`)\r\n6. **Open** a Pull Request\r\n\r\n---\r\n\r\n## \ud83d\udcca Project Status\r\n\r\n- **Current Version**: 1.1.3\r\n- **Development Status**: Beta\r\n- **Python Support**: 3.9+\r\n- **License**: Mozilla Public License 2.0\r\n- **Maintenance**: Actively maintained\r\n\r\n---\r\n\r\n## \ud83d\udcde Support & Links\r\n\r\n- **Homepage**: [https://github.com/nobandegani/InoPyUtils](https://github.com/nobandegani/InoPyUtils)\r\n- **Issues**: [https://github.com/nobandegani/InoPyUtils/issues](https://github.com/nobandegani/InoPyUtils/issues)\r\n- **PyPI**: [https://pypi.org/project/inopyutils/](https://pypi.org/project/inopyutils/)\r\n- **Contact**: contact@inoland.net\r\n\r\n---\r\n\r\n## \ud83d\udcc4 License\r\n\r\nThis project is licensed under the **Mozilla Public License 2.0** (MPL-2.0). See the [LICENSE](LICENSE) file for details.\r\n\r\n---\r\n\r\n## \ud83d\ude4f Acknowledgments\r\n\r\nBuilt with \u2764\ufe0f by the Inoland. Special thanks to all contributors and the open-source community for their invaluable tools and libraries that make this project possible.\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A comprehensive Python utility library for S3 storage, media processing, file management, configuration, and logging",
    "version": "1.3.4",
    "project_urls": {
        "Homepage": "https://github.com/nobandegani/InoPyUtils",
        "Issues": "https://github.com/nobandegani/InoPyUtils/issues"
    },
    "split_keywords": [
        "utilities",
        " s3",
        " media",
        " file-management",
        " logging",
        " configuration"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "22d2e7235d65d11dfd6ba89243dc119c5ca6cbd887e8cf2bc9e9145dbc4f221a",
                "md5": "a9b769ce9c5ec79f5d7461e537e2e6ae",
                "sha256": "2a329af0bbec42bbb6da1d783d894b18ff69d3fac7e973a2a7e03596a3fa92e8"
            },
            "downloads": -1,
            "filename": "inopyutils-1.3.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a9b769ce9c5ec79f5d7461e537e2e6ae",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 41331,
            "upload_time": "2025-10-25T15:06:25",
            "upload_time_iso_8601": "2025-10-25T15:06:25.531016Z",
            "url": "https://files.pythonhosted.org/packages/22/d2/e7235d65d11dfd6ba89243dc119c5ca6cbd887e8cf2bc9e9145dbc4f221a/inopyutils-1.3.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2532a04d6149c3c9386937206cda0ed4fae306bd17d2290d4fee0c1bab310a73",
                "md5": "0989063d4d1736b5a66bb5382e5fc687",
                "sha256": "5e7f6775125176ba9e09cc1ed7674e5cf073feeaa8a30d736e972f96e532031b"
            },
            "downloads": -1,
            "filename": "inopyutils-1.3.4.tar.gz",
            "has_sig": false,
            "md5_digest": "0989063d4d1736b5a66bb5382e5fc687",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 43926,
            "upload_time": "2025-10-25T15:06:26",
            "upload_time_iso_8601": "2025-10-25T15:06:26.880646Z",
            "url": "https://files.pythonhosted.org/packages/25/32/a04d6149c3c9386937206cda0ed4fae306bd17d2290d4fee0c1bab310a73/inopyutils-1.3.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-25 15:06:26",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "nobandegani",
    "github_project": "InoPyUtils",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "inopyutils"
}
        
Elapsed time: 0.96002s