""" Chunker exception hierarchy. Demonstrates: Managing exceptions and writing resilient code (Interview Topic 7). """ class PipelineError(Exception): """Base exception for all chunker pipeline errors.""" pass class ChunkError(PipelineError): """Errors related to chunk creation or validation.""" pass class ChunkReadError(ChunkError): """Failed to read chunk data from source file.""" pass class ChunkChecksumError(ChunkError): """Chunk data integrity validation failed.""" def __init__(self, sequence: int, expected: str, actual: str): self.sequence = sequence self.expected = expected self.actual = actual super().__init__( f"Chunk {sequence}: checksum mismatch " f"(expected={expected}, actual={actual})" ) class ProcessingError(PipelineError): """Errors during chunk processing by workers.""" pass class ProcessorTimeoutError(ProcessingError): """Processor exceeded allowed time for a chunk.""" def __init__(self, sequence: int, timeout: float): self.sequence = sequence self.timeout = timeout super().__init__(f"Chunk {sequence}: processor timed out after {timeout}s") class ProcessorFailureError(ProcessingError): """Processor failed to process a chunk after all retries.""" def __init__(self, sequence: int, retries: int, original_error: Exception): self.sequence = sequence self.retries = retries self.original_error = original_error super().__init__( f"Chunk {sequence}: failed after {retries} retries — {original_error}" ) class ReassemblyError(PipelineError): """Errors during result collection and ordering.""" pass