unzipall


Nameunzipall JSON
Version 1.0.1 PyPI version JSON
download
home_pageNone
SummaryUniversal archive extractor supporting 30+ formats including ZIP, RAR, 7Z, TAR, and many more
upload_time2025-08-02 17:41:06
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords archive extract zip rar 7z tar compression unzip extractor decompress unpack universal
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # UnzipAll - Universal Archive Extractor

[![PyPI version](https://badge.fury.io/py/unzipall.svg)](https://badge.fury.io/py/unzipall)
[![Python versions](https://img.shields.io/pypi/pyversions/unzipall.svg)](https://pypi.org/project/unzipall/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Tests](https://github.com/mricardo/unzipall/workflows/Tests/badge.svg)](https://github.com/mricardo/unzipall/actions)
[![Coverage](https://codecov.io/gh/mricardo/unzipall/branch/main/graph/badge.svg)](https://codecov.io/gh/mricardo/unzipall)

A comprehensive Python library for extracting archive files in **30+ formats** with a simple, unified API. No more juggling multiple extraction libraries or dealing with format-specific quirks.

## โœจ Features

- **๐Ÿ—ƒ๏ธ Universal Format Support**: ZIP, RAR, 7Z, TAR (all variants), ISO, MSI, and 25+ more formats
- **๐Ÿ›ก๏ธ Security First**: Built-in protection against path traversal attacks (zip bombs)
- **๐Ÿ” Password Support**: Handle encrypted archives seamlessly
- **โšก Simple API**: One function call to extract any supported archive
- **๐Ÿ”ง CLI Tool**: Extract archives from command line with `unzipall` command
- **๐ŸŒ Cross-Platform**: Works on Windows, macOS, and Linux
- **๐Ÿ—๏ธ Type Safe**: Full type hints for better IDE support and development experience
- **๐Ÿ“Š Graceful Degradation**: Optional dependencies - missing libraries don't break functionality

## ๐Ÿš€ Quick Start

### Installation

```bash
pip install unzipall
```

### Basic Usage

```python
import unzipall

# Extract any archive format - it just works!
unzipall.extract('archive.zip')
unzipall.extract('data.tar.gz', 'output_folder')
unzipall.extract('encrypted.7z', password='secret')

# Check if format is supported
if unzipall.is_supported('mystery_file.xyz'):
    unzipall.extract('mystery_file.xyz')

# List all supported formats  
formats = unzipall.list_supported_formats()
print(f"Supports {len(formats)} formats!")
```

### Command Line Usage

```bash
# Extract to current directory
unzipall archive.zip

# Extract to specific directory
unzipall archive.tar.gz /path/to/output

# Extract password-protected archive
unzipall -p mypassword encrypted.7z

# List supported formats
unzipall --list-formats

# Verbose output
unzipall -v archive.rar output_dir
```

## ๐Ÿ“ Supported Formats

| Category | Formats | Status |
|----------|---------|--------|
| **ZIP Family** | `.zip`, `.jar`, `.war`, `.ear`, `.apk`, `.epub`, `.cbz` | โœ… Built-in |
| **RAR Family** | `.rar`, `.cbr` | โœ… Full Support |
| **7-Zip** | `.7z`, `.cb7` | โœ… Full Support |
| **TAR Archives** | `.tar`, `.tar.gz`, `.tgz`, `.tar.bz2`, `.tbz2`, `.tar.xz`, `.txz`, `.tar.z`, `.tar.lzma` | โœ… Built-in |
| **Compression** | `.gz`, `.bz2`, `.xz`, `.lzma`, `.z` | โœ… Built-in |
| **Other Archives** | `.arj`, `.cab`, `.chm`, `.cpio`, `.deb`, `.rpm`, `.lzh`, `.lha` | โœ… Via patool |
| **Disk Images** | `.iso`, `.vhd`, `.udf` | โœ… Full Support |
| **Microsoft** | `.msi`, `.exe` (self-extracting), `.wim` | โœ… Platform-aware |
| **Specialized** | `.xar`, `.zpaq`, `.cso`, `.pkg`, `.cbt` | โœ… Via patool |

> **30+ formats supported!** If a format isn't working, it may require additional system tools (see [System Dependencies](#-system-dependencies)).

## ๐Ÿ›  Advanced Usage

### Programmatic API

```python
from unzipall import ArchiveExtractor, ArchiveExtractionError

# Create extractor with custom settings
extractor = ArchiveExtractor(verbose=True)

# Check available features
features = extractor.get_available_features()
for feature, available in features.items():
    status = "โœ…" if available else "โŒ"
    print(f"{status} {feature}")

# Extract with error handling
try:
    success = extractor.extract(
        archive_path='large_archive.rar',
        extract_to='output_directory',
        password='optional_password'
    )
    if success:
        print("Extraction completed successfully!")
        
except ArchiveExtractionError as e:
    print(f"Extraction failed: {e}")
```

### Error Handling

UnzipAll provides specific exceptions for different failure scenarios:

```python
from unzipall import (
    ArchiveExtractionError, UnsupportedFormatError, 
    CorruptedArchiveError, PasswordRequiredError,
    InvalidPasswordError, ExtractionPermissionError, 
    DiskSpaceError
)

try:
    unzipall.extract('archive.zip')
except UnsupportedFormatError:
    print("This archive format is not supported")
except PasswordRequiredError:
    password = input("Enter password: ")
    unzipall.extract('archive.zip', password=password)
except CorruptedArchiveError:
    print("Archive file is corrupted")
except DiskSpaceError:
    print("Not enough disk space")
except ArchiveExtractionError as e:
    print(f"Extraction failed: {e}")
```

### Security Features

UnzipAll automatically protects against common archive-based attacks:

```python
# Path traversal protection (zip bombs)
# Malicious archives with paths like "../../etc/passwd" are safely handled
unzipall.extract('potentially_malicious.zip', 'safe_output_dir')

# Files are extracted only within the target directory
# Dangerous paths are logged and skipped
```

## ๐Ÿ”ง System Dependencies

While UnzipAll works out of the box for common formats (ZIP, TAR, GZIP, etc.), some formats require additional system tools:

### Windows
```bash
# Install via Windows Package Manager
winget install 7zip.7zip
winget install RARLab.WinRAR

# Or install via Chocolatey
choco install 7zip winrar
```

### macOS
```bash
# Using Homebrew
brew install p7zip unrar

# For additional formats
brew install cabextract unshield
```

### Linux (Ubuntu/Debian)
```bash
sudo apt update
sudo apt install p7zip-full unrar-free

# For additional formats
sudo apt install cabextract unshield cpio
```

### Linux (RHEL/CentOS/Fedora)
```bash
sudo dnf install p7zip p7zip-plugins unrar

# For additional formats  
sudo dnf install cabextract unshield cpio
```

### Docker Usage

```dockerfile
FROM python:3.11-slim

# Install system dependencies
RUN apt-get update && apt-get install -y \
    p7zip-full \
    unrar-free \
    cabextract \
    && rm -rf /var/lib/apt/lists/*

# Install unzipall
RUN pip install unzipall

# Your application code
COPY . /app
WORKDIR /app
```

## ๐Ÿ“Š Performance

UnzipAll is designed for reliability and format support over raw speed. Benchmarks on typical archives:

- **ZIP files**: ~80 extractions/second
- **TAR.GZ files**: ~60 extractions/second
- **7Z files**: ~40 extractions/second
- **RAR files**: ~35 extractions/second

Performance varies based on archive size, compression ratio, and available system resources.

## ๐Ÿงช Development & Testing

```bash
# Clone the repository
git clone https://github.com/mricardo/unzipall.git
cd unzipall

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

# Run tests
pytest

# Run tests with coverage
pytest --cov=src/unzipall --cov-report=html

# Format code
black src/ tests/

# Type checking
mypy src/

# Lint code
flake8 src/ tests/
```

### Running Specific Tests

```bash
# Test basic functionality
pytest tests/test_smoke.py -v

# Test specific archive format
pytest tests/test_core.py::test_extract_valid_zip -v

# Performance benchmarks
pytest tests/test_performance.py --benchmark-only

# Skip slow tests
pytest -m "not slow"
```

## ๐Ÿ”— API Reference

### Main Functions

#### `extract(archive_path, extract_to=None, password=None, verbose=False)`
Extract an archive to the specified directory.

**Parameters:**
- `archive_path` (str|Path): Path to the archive file
- `extract_to` (str|Path, optional): Output directory (defaults to archive stem name)
- `password` (str, optional): Password for encrypted archives
- `verbose` (bool): Enable detailed logging

**Returns:** `bool` - True if successful

**Example:**
```python
# Extract to default location (archive stem name)
unzipall.extract('myfiles.zip')  # Creates ./myfiles/

# Extract to specific directory
unzipall.extract('myfiles.zip', 'custom_output')

# Extract encrypted archive
unzipall.extract('secret.7z', password='mypassword')
```

#### `is_supported(file_path)`
Check if a file format is supported.

**Parameters:**
- `file_path` (str|Path): Path to file to check

**Returns:** `bool` - True if format is supported

**Example:**
```python
if unzipall.is_supported('data.xyz'):
    print("This format is supported!")
else:
    print("Unsupported format")
```

#### `list_supported_formats()`
Get list of all supported file extensions.

**Returns:** `List[str]` - Sorted list of supported extensions

**Example:**
```python
formats = unzipall.list_supported_formats()
print(f"Supported: {', '.join(formats)}")
```

### ArchiveExtractor Class

For advanced usage with custom configuration:

```python
from unzipall import ArchiveExtractor

extractor = ArchiveExtractor(verbose=True)

# Check what features are available
features = extractor.get_available_features()

# Extract with custom settings
success = extractor.extract('archive.zip', 'output_dir')
```

### Exception Hierarchy

```
ArchiveExtractionError (base)
โ”œโ”€โ”€ UnsupportedFormatError
โ”œโ”€โ”€ CorruptedArchiveError  
โ”œโ”€โ”€ PasswordRequiredError
โ”œโ”€โ”€ InvalidPasswordError
โ”œโ”€โ”€ ExtractionPermissionError
โ””โ”€โ”€ DiskSpaceError
```

## ๐Ÿค Contributing

Contributions are welcome! Here's how to get started:

1. **Fork the repository** on GitHub
2. **Create a feature branch**: `git checkout -b feature/amazing-feature`
3. **Install development dependencies**: `pip install -e ".[dev]"`
4. **Make your changes** and add tests
5. **Run the test suite**: `pytest`
6. **Commit your changes**: `git commit -m "Add amazing feature"`
7. **Push to the branch**: `git push origin feature/amazing-feature`
8. **Open a Pull Request**

### Development Guidelines

- Write tests for new features
- Follow PEP 8 style guidelines (use `black` for formatting)
- Add type hints for new functions
- Update documentation for API changes
- Ensure all tests pass before submitting

## ๐Ÿ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## ๐Ÿ™ Acknowledgments

- Built on top of excellent libraries: [`py7zr`](https://github.com/miurahr/py7zr), [`rarfile`](https://github.com/markokr/rarfile), [`patool`](https://github.com/wummel/patool), [`libarchive-c`](https://github.com/Changaco/python-libarchive-c), and others
- Inspired by the need for a simple, unified archive extraction interface
- Thanks to all contributors and users who help improve this library

## ๐Ÿ”— Related Projects

- **[patool](https://github.com/wummel/patool)** - Command-line archive tool
- **[py7zr](https://github.com/miurahr/py7zr)** - Pure Python 7-zip library
- **[rarfile](https://github.com/markokr/rarfile)** - RAR archive reader
- **[zipfile](https://docs.python.org/3/library/zipfile.html)** - Python standard library ZIP support

## ๐Ÿ“ž Support

- **Documentation**: Check this README and docstrings
- **Issues**: [GitHub Issues](https://github.com/mricardo/unzipall/issues)
- **Discussions**: [GitHub Discussions](https://github.com/mricardo/unzipall/discussions)
- **Email**: ricardo.lee.cm@gmail.com

---

**Star this repo if you find it useful! โญ**

Made with โค๏ธ by [mricardo](https://github.com/mricardo)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "unzipall",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "mricardo <ricardo.lee.cm@gmail.com>",
    "keywords": "archive, extract, zip, rar, 7z, tar, compression, unzip, extractor, decompress, unpack, universal",
    "author": null,
    "author_email": "mricardo <ricardo.lee.cm@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/f1/e7/74d7f663cfa2548f5642b662c5fa7aa97aee94c786ea4c37a4e37a2f3de6/unzipall-1.0.1.tar.gz",
    "platform": null,
    "description": "# UnzipAll - Universal Archive Extractor\n\n[![PyPI version](https://badge.fury.io/py/unzipall.svg)](https://badge.fury.io/py/unzipall)\n[![Python versions](https://img.shields.io/pypi/pyversions/unzipall.svg)](https://pypi.org/project/unzipall/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Tests](https://github.com/mricardo/unzipall/workflows/Tests/badge.svg)](https://github.com/mricardo/unzipall/actions)\n[![Coverage](https://codecov.io/gh/mricardo/unzipall/branch/main/graph/badge.svg)](https://codecov.io/gh/mricardo/unzipall)\n\nA comprehensive Python library for extracting archive files in **30+ formats** with a simple, unified API. No more juggling multiple extraction libraries or dealing with format-specific quirks.\n\n## \u2728 Features\n\n- **\ud83d\uddc3\ufe0f Universal Format Support**: ZIP, RAR, 7Z, TAR (all variants), ISO, MSI, and 25+ more formats\n- **\ud83d\udee1\ufe0f Security First**: Built-in protection against path traversal attacks (zip bombs)\n- **\ud83d\udd10 Password Support**: Handle encrypted archives seamlessly\n- **\u26a1 Simple API**: One function call to extract any supported archive\n- **\ud83d\udd27 CLI Tool**: Extract archives from command line with `unzipall` command\n- **\ud83c\udf0d Cross-Platform**: Works on Windows, macOS, and Linux\n- **\ud83c\udfd7\ufe0f Type Safe**: Full type hints for better IDE support and development experience\n- **\ud83d\udcca Graceful Degradation**: Optional dependencies - missing libraries don't break functionality\n\n## \ud83d\ude80 Quick Start\n\n### Installation\n\n```bash\npip install unzipall\n```\n\n### Basic Usage\n\n```python\nimport unzipall\n\n# Extract any archive format - it just works!\nunzipall.extract('archive.zip')\nunzipall.extract('data.tar.gz', 'output_folder')\nunzipall.extract('encrypted.7z', password='secret')\n\n# Check if format is supported\nif unzipall.is_supported('mystery_file.xyz'):\n    unzipall.extract('mystery_file.xyz')\n\n# List all supported formats  \nformats = unzipall.list_supported_formats()\nprint(f\"Supports {len(formats)} formats!\")\n```\n\n### Command Line Usage\n\n```bash\n# Extract to current directory\nunzipall archive.zip\n\n# Extract to specific directory\nunzipall archive.tar.gz /path/to/output\n\n# Extract password-protected archive\nunzipall -p mypassword encrypted.7z\n\n# List supported formats\nunzipall --list-formats\n\n# Verbose output\nunzipall -v archive.rar output_dir\n```\n\n## \ud83d\udcc1 Supported Formats\n\n| Category | Formats | Status |\n|----------|---------|--------|\n| **ZIP Family** | `.zip`, `.jar`, `.war`, `.ear`, `.apk`, `.epub`, `.cbz` | \u2705 Built-in |\n| **RAR Family** | `.rar`, `.cbr` | \u2705 Full Support |\n| **7-Zip** | `.7z`, `.cb7` | \u2705 Full Support |\n| **TAR Archives** | `.tar`, `.tar.gz`, `.tgz`, `.tar.bz2`, `.tbz2`, `.tar.xz`, `.txz`, `.tar.z`, `.tar.lzma` | \u2705 Built-in |\n| **Compression** | `.gz`, `.bz2`, `.xz`, `.lzma`, `.z` | \u2705 Built-in |\n| **Other Archives** | `.arj`, `.cab`, `.chm`, `.cpio`, `.deb`, `.rpm`, `.lzh`, `.lha` | \u2705 Via patool |\n| **Disk Images** | `.iso`, `.vhd`, `.udf` | \u2705 Full Support |\n| **Microsoft** | `.msi`, `.exe` (self-extracting), `.wim` | \u2705 Platform-aware |\n| **Specialized** | `.xar`, `.zpaq`, `.cso`, `.pkg`, `.cbt` | \u2705 Via patool |\n\n> **30+ formats supported!** If a format isn't working, it may require additional system tools (see [System Dependencies](#-system-dependencies)).\n\n## \ud83d\udee0 Advanced Usage\n\n### Programmatic API\n\n```python\nfrom unzipall import ArchiveExtractor, ArchiveExtractionError\n\n# Create extractor with custom settings\nextractor = ArchiveExtractor(verbose=True)\n\n# Check available features\nfeatures = extractor.get_available_features()\nfor feature, available in features.items():\n    status = \"\u2705\" if available else \"\u274c\"\n    print(f\"{status} {feature}\")\n\n# Extract with error handling\ntry:\n    success = extractor.extract(\n        archive_path='large_archive.rar',\n        extract_to='output_directory',\n        password='optional_password'\n    )\n    if success:\n        print(\"Extraction completed successfully!\")\n        \nexcept ArchiveExtractionError as e:\n    print(f\"Extraction failed: {e}\")\n```\n\n### Error Handling\n\nUnzipAll provides specific exceptions for different failure scenarios:\n\n```python\nfrom unzipall import (\n    ArchiveExtractionError, UnsupportedFormatError, \n    CorruptedArchiveError, PasswordRequiredError,\n    InvalidPasswordError, ExtractionPermissionError, \n    DiskSpaceError\n)\n\ntry:\n    unzipall.extract('archive.zip')\nexcept UnsupportedFormatError:\n    print(\"This archive format is not supported\")\nexcept PasswordRequiredError:\n    password = input(\"Enter password: \")\n    unzipall.extract('archive.zip', password=password)\nexcept CorruptedArchiveError:\n    print(\"Archive file is corrupted\")\nexcept DiskSpaceError:\n    print(\"Not enough disk space\")\nexcept ArchiveExtractionError as e:\n    print(f\"Extraction failed: {e}\")\n```\n\n### Security Features\n\nUnzipAll automatically protects against common archive-based attacks:\n\n```python\n# Path traversal protection (zip bombs)\n# Malicious archives with paths like \"../../etc/passwd\" are safely handled\nunzipall.extract('potentially_malicious.zip', 'safe_output_dir')\n\n# Files are extracted only within the target directory\n# Dangerous paths are logged and skipped\n```\n\n## \ud83d\udd27 System Dependencies\n\nWhile UnzipAll works out of the box for common formats (ZIP, TAR, GZIP, etc.), some formats require additional system tools:\n\n### Windows\n```bash\n# Install via Windows Package Manager\nwinget install 7zip.7zip\nwinget install RARLab.WinRAR\n\n# Or install via Chocolatey\nchoco install 7zip winrar\n```\n\n### macOS\n```bash\n# Using Homebrew\nbrew install p7zip unrar\n\n# For additional formats\nbrew install cabextract unshield\n```\n\n### Linux (Ubuntu/Debian)\n```bash\nsudo apt update\nsudo apt install p7zip-full unrar-free\n\n# For additional formats\nsudo apt install cabextract unshield cpio\n```\n\n### Linux (RHEL/CentOS/Fedora)\n```bash\nsudo dnf install p7zip p7zip-plugins unrar\n\n# For additional formats  \nsudo dnf install cabextract unshield cpio\n```\n\n### Docker Usage\n\n```dockerfile\nFROM python:3.11-slim\n\n# Install system dependencies\nRUN apt-get update && apt-get install -y \\\n    p7zip-full \\\n    unrar-free \\\n    cabextract \\\n    && rm -rf /var/lib/apt/lists/*\n\n# Install unzipall\nRUN pip install unzipall\n\n# Your application code\nCOPY . /app\nWORKDIR /app\n```\n\n## \ud83d\udcca Performance\n\nUnzipAll is designed for reliability and format support over raw speed. Benchmarks on typical archives:\n\n- **ZIP files**: ~80 extractions/second\n- **TAR.GZ files**: ~60 extractions/second\n- **7Z files**: ~40 extractions/second\n- **RAR files**: ~35 extractions/second\n\nPerformance varies based on archive size, compression ratio, and available system resources.\n\n## \ud83e\uddea Development & Testing\n\n```bash\n# Clone the repository\ngit clone https://github.com/mricardo/unzipall.git\ncd unzipall\n\n# Install in development mode\npip install -e \".[dev]\"\n\n# Run tests\npytest\n\n# Run tests with coverage\npytest --cov=src/unzipall --cov-report=html\n\n# Format code\nblack src/ tests/\n\n# Type checking\nmypy src/\n\n# Lint code\nflake8 src/ tests/\n```\n\n### Running Specific Tests\n\n```bash\n# Test basic functionality\npytest tests/test_smoke.py -v\n\n# Test specific archive format\npytest tests/test_core.py::test_extract_valid_zip -v\n\n# Performance benchmarks\npytest tests/test_performance.py --benchmark-only\n\n# Skip slow tests\npytest -m \"not slow\"\n```\n\n## \ud83d\udd17 API Reference\n\n### Main Functions\n\n#### `extract(archive_path, extract_to=None, password=None, verbose=False)`\nExtract an archive to the specified directory.\n\n**Parameters:**\n- `archive_path` (str|Path): Path to the archive file\n- `extract_to` (str|Path, optional): Output directory (defaults to archive stem name)\n- `password` (str, optional): Password for encrypted archives\n- `verbose` (bool): Enable detailed logging\n\n**Returns:** `bool` - True if successful\n\n**Example:**\n```python\n# Extract to default location (archive stem name)\nunzipall.extract('myfiles.zip')  # Creates ./myfiles/\n\n# Extract to specific directory\nunzipall.extract('myfiles.zip', 'custom_output')\n\n# Extract encrypted archive\nunzipall.extract('secret.7z', password='mypassword')\n```\n\n#### `is_supported(file_path)`\nCheck if a file format is supported.\n\n**Parameters:**\n- `file_path` (str|Path): Path to file to check\n\n**Returns:** `bool` - True if format is supported\n\n**Example:**\n```python\nif unzipall.is_supported('data.xyz'):\n    print(\"This format is supported!\")\nelse:\n    print(\"Unsupported format\")\n```\n\n#### `list_supported_formats()`\nGet list of all supported file extensions.\n\n**Returns:** `List[str]` - Sorted list of supported extensions\n\n**Example:**\n```python\nformats = unzipall.list_supported_formats()\nprint(f\"Supported: {', '.join(formats)}\")\n```\n\n### ArchiveExtractor Class\n\nFor advanced usage with custom configuration:\n\n```python\nfrom unzipall import ArchiveExtractor\n\nextractor = ArchiveExtractor(verbose=True)\n\n# Check what features are available\nfeatures = extractor.get_available_features()\n\n# Extract with custom settings\nsuccess = extractor.extract('archive.zip', 'output_dir')\n```\n\n### Exception Hierarchy\n\n```\nArchiveExtractionError (base)\n\u251c\u2500\u2500 UnsupportedFormatError\n\u251c\u2500\u2500 CorruptedArchiveError  \n\u251c\u2500\u2500 PasswordRequiredError\n\u251c\u2500\u2500 InvalidPasswordError\n\u251c\u2500\u2500 ExtractionPermissionError\n\u2514\u2500\u2500 DiskSpaceError\n```\n\n## \ud83e\udd1d Contributing\n\nContributions are welcome! Here's how to get started:\n\n1. **Fork the repository** on GitHub\n2. **Create a feature branch**: `git checkout -b feature/amazing-feature`\n3. **Install development dependencies**: `pip install -e \".[dev]\"`\n4. **Make your changes** and add tests\n5. **Run the test suite**: `pytest`\n6. **Commit your changes**: `git commit -m \"Add amazing feature\"`\n7. **Push to the branch**: `git push origin feature/amazing-feature`\n8. **Open a Pull Request**\n\n### Development Guidelines\n\n- Write tests for new features\n- Follow PEP 8 style guidelines (use `black` for formatting)\n- Add type hints for new functions\n- Update documentation for API changes\n- Ensure all tests pass before submitting\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- Built on top of excellent libraries: [`py7zr`](https://github.com/miurahr/py7zr), [`rarfile`](https://github.com/markokr/rarfile), [`patool`](https://github.com/wummel/patool), [`libarchive-c`](https://github.com/Changaco/python-libarchive-c), and others\n- Inspired by the need for a simple, unified archive extraction interface\n- Thanks to all contributors and users who help improve this library\n\n## \ud83d\udd17 Related Projects\n\n- **[patool](https://github.com/wummel/patool)** - Command-line archive tool\n- **[py7zr](https://github.com/miurahr/py7zr)** - Pure Python 7-zip library\n- **[rarfile](https://github.com/markokr/rarfile)** - RAR archive reader\n- **[zipfile](https://docs.python.org/3/library/zipfile.html)** - Python standard library ZIP support\n\n## \ud83d\udcde Support\n\n- **Documentation**: Check this README and docstrings\n- **Issues**: [GitHub Issues](https://github.com/mricardo/unzipall/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/mricardo/unzipall/discussions)\n- **Email**: ricardo.lee.cm@gmail.com\n\n---\n\n**Star this repo if you find it useful! \u2b50**\n\nMade with \u2764\ufe0f by [mricardo](https://github.com/mricardo)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Universal archive extractor supporting 30+ formats including ZIP, RAR, 7Z, TAR, and many more",
    "version": "1.0.1",
    "project_urls": {
        "Bug Tracker": "https://github.com/mricardo/unzipall/issues",
        "Documentation": "https://github.com/mricardo/unzipall#readme",
        "Funding": "https://github.com/sponsors/mricardo",
        "Homepage": "https://github.com/mricardo/unzipall",
        "Repository": "https://github.com/mricardo/unzipall"
    },
    "split_keywords": [
        "archive",
        " extract",
        " zip",
        " rar",
        " 7z",
        " tar",
        " compression",
        " unzip",
        " extractor",
        " decompress",
        " unpack",
        " universal"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b5cd64da418a024d488b1f960f23439b6b4a2acc1053e7e5e59a45a54dcddca4",
                "md5": "902f1bea58548079e099082d09a9f11e",
                "sha256": "5dc7c645bbdda5d05f4af76f6f8031bb4c173835bf7312397cfbc2a5734f09e8"
            },
            "downloads": -1,
            "filename": "unzipall-1.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "902f1bea58548079e099082d09a9f11e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 15158,
            "upload_time": "2025-08-02T17:41:05",
            "upload_time_iso_8601": "2025-08-02T17:41:05.393540Z",
            "url": "https://files.pythonhosted.org/packages/b5/cd/64da418a024d488b1f960f23439b6b4a2acc1053e7e5e59a45a54dcddca4/unzipall-1.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f1e774d7f663cfa2548f5642b662c5fa7aa97aee94c786ea4c37a4e37a2f3de6",
                "md5": "37892dbc75815449104bc1a121d1817e",
                "sha256": "360afbaa59f956bdc071d193f851eb111e1fcaf636eeb305386e6d5d983c5daa"
            },
            "downloads": -1,
            "filename": "unzipall-1.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "37892dbc75815449104bc1a121d1817e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 19736,
            "upload_time": "2025-08-02T17:41:06",
            "upload_time_iso_8601": "2025-08-02T17:41:06.689793Z",
            "url": "https://files.pythonhosted.org/packages/f1/e7/74d7f663cfa2548f5642b662c5fa7aa97aee94c786ea4c37a4e37a2f3de6/unzipall-1.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-02 17:41:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "mricardo",
    "github_project": "unzipall",
    "github_not_found": true,
    "lcname": "unzipall"
}
        
Elapsed time: 1.27486s