| Name | inopyutils JSON |
| Version |
1.3.4
JSON |
| download |
| home_page | None |
| Summary | A comprehensive Python utility library for S3 storage, media processing, file management, configuration, and logging |
| upload_time | 2025-10-25 15:06:26 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.9 |
| license | None |
| 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
[](https://python.org)
[](https://pypi.org/project/inopyutils/)
[](LICENSE)
[](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[](https://python.org)\r\n[](https://pypi.org/project/inopyutils/)\r\n[](LICENSE)\r\n[](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"
}