--- 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() ```