Updated multiple documentation files to include Open Graph and Twitter metadata for better social media sharing. Added a new logo image to the static assets folder and referenced it in the metadata.
273 lines
7.7 KiB
Markdown
273 lines
7.7 KiB
Markdown
---
|
|
myst:
|
|
html_meta:
|
|
description: "Complete reference for tzst exception classes and error handling. Learn about TzstError, TzstArchiveError, and other custom exceptions for robust archive operations."
|
|
keywords: "tzst exceptions, Python exceptions, error handling, TzstError, TzstArchiveError, archive errors, compression errors"
|
|
og:title: "tzst Exceptions API Reference"
|
|
og:description: "Complete reference for tzst exception classes and error handling. Learn about TzstError, TzstArchiveError, and other custom exceptions for robust archive operations."
|
|
og:type: "article"
|
|
twitter:title: "tzst Exceptions API Reference"
|
|
twitter:description: "Complete reference for tzst exception classes and error handling. Learn about TzstError, TzstArchiveError, and other custom exceptions for robust archive operations."
|
|
og:type: "website"
|
|
og:image: "https://tzst.xi-xu.me/_static/tzst-square-logo.png"
|
|
og:url: "https://tzst.xi-xu.me/"
|
|
twitter:card: "summary_large_image"
|
|
twitter:image: "https://tzst.xi-xu.me/_static/tzst-square-logo.png"
|
|
---
|
|
|
|
# Exceptions API
|
|
|
|
Custom exception classes used by tzst for comprehensive error handling and debugging.
|
|
|
|
```{eval-rst}
|
|
.. automodule:: tzst.exceptions
|
|
:members:
|
|
:undoc-members:
|
|
:show-inheritance:
|
|
:no-index:
|
|
```
|
|
|
|
## Overview
|
|
|
|
The tzst library provides a comprehensive hierarchy of exceptions to help identify and handle different types of errors that may occur during archive operations. All exceptions inherit from the base `TzstError` class, making it easy to catch all tzst-related errors with a single exception handler.
|
|
|
|
### Exception Hierarchy
|
|
|
|
```text
|
|
TzstError (base exception)
|
|
├── TzstArchiveError (archive operation failures)
|
|
├── TzstCompressionError (compression failures)
|
|
└── TzstDecompressionError (decompression failures)
|
|
```
|
|
|
|
## Exception Classes
|
|
|
|
### Base Exception
|
|
|
|
#### TzstError
|
|
|
|
```{eval-rst}
|
|
.. autoexception:: tzst.exceptions.TzstError
|
|
:members:
|
|
:show-inheritance:
|
|
```
|
|
|
|
The base exception class for all tzst operations. Catch this exception to handle any tzst-related error in your application.
|
|
|
|
**Usage:**
|
|
|
|
```python
|
|
from tzst import create_archive, TzstError
|
|
|
|
try:
|
|
create_archive("backup.tzst", ["files/"])
|
|
except TzstError as e:
|
|
print(f"tzst operation failed: {e}")
|
|
```
|
|
|
|
### Archive Operation Exceptions
|
|
|
|
#### TzstArchiveError
|
|
|
|
```{eval-rst}
|
|
.. autoexception:: tzst.exceptions.TzstArchiveError
|
|
:members:
|
|
:show-inheritance:
|
|
```
|
|
|
|
Raised when archive operations fail, such as:
|
|
|
|
- Archive file cannot be opened or created
|
|
- File permissions prevent archive access
|
|
- Archive structure is malformed
|
|
- Tar operations fail within the archive
|
|
- Atomic file operations fail during creation
|
|
|
|
**Common Scenarios:**
|
|
|
|
- Invalid archive file path
|
|
- Insufficient disk space
|
|
- File permission errors
|
|
- Corrupt archive structure
|
|
|
|
### Compression Exceptions
|
|
|
|
#### TzstCompressionError
|
|
|
|
```{eval-rst}
|
|
.. autoexception:: tzst.exceptions.TzstCompressionError
|
|
:members:
|
|
:show-inheritance:
|
|
```
|
|
|
|
Raised when compression operations fail, including:
|
|
|
|
- Invalid compression level is specified
|
|
- Disk space is insufficient during compression
|
|
- Input data cannot be compressed due to corruption
|
|
- Zstandard compression encounters an internal error
|
|
|
|
**Common Scenarios:**
|
|
|
|
- Compression level out of range (1-22)
|
|
- Insufficient disk space during compression
|
|
- Source file corruption
|
|
- Zstandard library errors
|
|
|
|
### Decompression Exceptions
|
|
|
|
#### TzstDecompressionError
|
|
|
|
```{eval-rst}
|
|
.. autoexception:: tzst.exceptions.TzstDecompressionError
|
|
:members:
|
|
:show-inheritance:
|
|
```
|
|
|
|
Raised when decompression operations fail, such as:
|
|
|
|
- Archive file is corrupted or incomplete
|
|
- Archive was not created with zstandard compression
|
|
- Decompression buffer overflows or underflows
|
|
- Archive format is invalid or unsupported
|
|
|
|
**Common Scenarios:**
|
|
|
|
- Corrupted or truncated archive files
|
|
- Non-zstandard compressed archives
|
|
- Invalid tar structure within archive
|
|
- Archive format version mismatches
|
|
|
|
## Error Handling Best Practices
|
|
|
|
### Basic Error Handling
|
|
|
|
```python
|
|
from tzst import create_archive, TzstArchiveError, TzstCompressionError
|
|
|
|
try:
|
|
create_archive("backup.tzst", ["documents/"])
|
|
except TzstCompressionError as e:
|
|
print(f"Compression failed: {e}")
|
|
except TzstArchiveError as e:
|
|
print(f"Archive operation failed: {e}")
|
|
```
|
|
|
|
### Comprehensive Error Handling
|
|
|
|
```python
|
|
from tzst import extract_archive, TzstError
|
|
|
|
try:
|
|
extract_archive("backup.tzst", "restore/")
|
|
except TzstError as e:
|
|
# Catch any tzst-related error
|
|
print(f"Operation failed: {e}")
|
|
# Perform cleanup or fallback operations
|
|
```
|
|
|
|
### Specific Exception Handling
|
|
|
|
```python
|
|
from tzst import TzstArchive, TzstDecompressionError, TzstArchiveError
|
|
|
|
def safe_extract(archive_path, output_dir):
|
|
try:
|
|
with TzstArchive(archive_path, "r") as archive:
|
|
# Test integrity first
|
|
if not archive.test():
|
|
print("Archive integrity check failed")
|
|
return False
|
|
|
|
# Extract files
|
|
archive.extractall(output_dir)
|
|
return True
|
|
|
|
except TzstDecompressionError as e:
|
|
print(f"Archive is corrupted or invalid: {e}")
|
|
return False
|
|
except TzstArchiveError as e:
|
|
print(f"Archive operation failed: {e}")
|
|
return False
|
|
except FileNotFoundError: print(f"Archive file not found: {archive_path}")
|
|
return False
|
|
except PermissionError:
|
|
print(f"Permission denied accessing: {archive_path}")
|
|
return False
|
|
|
|
```
|
|
|
|
### Logging Integration
|
|
|
|
```python
|
|
import logging
|
|
from tzst import test_archive, TzstDecompressionError, TzstError
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def verify_archive(archive_path):
|
|
"""Verify archive integrity with comprehensive logging."""
|
|
try:
|
|
if test_archive(archive_path):
|
|
logger.info(f"Archive {archive_path} is valid")
|
|
return True
|
|
except TzstDecompressionError as e:
|
|
logger.error(f"Archive {archive_path} is corrupted: {e}")
|
|
except TzstError as e:
|
|
logger.error(f"tzst error for {archive_path}: {e}")
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error testing {archive_path}: {e}")
|
|
|
|
return False
|
|
```
|
|
|
|
### Error Recovery Patterns
|
|
|
|
```python
|
|
from tzst import create_archive, extract_archive, TzstError
|
|
from pathlib import Path
|
|
import tempfile
|
|
import shutil
|
|
|
|
def robust_backup_and_restore(source_dir, backup_path, restore_dir):
|
|
"""Robust backup with error recovery and validation."""
|
|
temp_backup = None
|
|
|
|
try:
|
|
# Create backup with temporary file for atomicity
|
|
with tempfile.NamedTemporaryFile(suffix='.tzst', delete=False) as temp_file:
|
|
temp_backup = Path(temp_file.name)
|
|
|
|
# Create archive
|
|
create_archive(temp_backup, [source_dir], compression_level=6)
|
|
|
|
# Verify archive before moving to final location
|
|
if not test_archive(temp_backup):
|
|
raise TzstArchiveError("Created archive failed integrity check")
|
|
|
|
# Move to final location atomically
|
|
shutil.move(temp_backup, backup_path)
|
|
temp_backup = None # Successfully moved
|
|
|
|
# Test restoration
|
|
extract_archive(backup_path, restore_dir)
|
|
|
|
print(f"Backup and restore completed successfully")
|
|
return True
|
|
|
|
except TzstError as e:
|
|
print(f"tzst operation failed: {e}")
|
|
# Cleanup and recovery logic
|
|
if restore_dir.exists():
|
|
shutil.rmtree(restore_dir)
|
|
return False
|
|
except Exception as e:
|
|
print(f"Unexpected error: {e}")
|
|
return False
|
|
|
|
finally:
|
|
# Cleanup temporary files
|
|
if temp_backup and temp_backup.exists():
|
|
temp_backup.unlink()
|
|
```
|