Files
markitect-main/markitect/exceptions.py
tegwick bbc6192fe1 refactor: Standardize error handling patterns across codebase
Comprehensive error handling improvements addressing inconsistent patterns:

• Created markitect/exceptions.py with complete domain-specific exception hierarchy
  - MarkitectError base class with context and cause chaining support
  - Specific exceptions for Document, AST, Cache, Database, Schema operations
  - Built-in logging and context preservation

• Fixed overly broad exception handling in tddai modules:
  - issue_fetcher.py: Replace generic Exception with specific Gitea errors
  - project_manager.py: Proper error translation with context preservation
  - coverage_analyzer.py: Replace silent suppression with logging

• Enhanced cache_service.py error handling:
  - Specific OSError/PermissionError handling for file operations
  - Logging integration for unexpected errors
  - Preserved error collection and reporting

• Implemented proper exception chaining patterns:
  - All error translations use `raise ... from e` for debugging
  - Preserved original exception context and stack traces
  - Added docstring declarations of raised exceptions

• Benefits:
  - Eliminates silent error suppression and debugging black holes
  - Provides specific, actionable error messages
  - Preserves full error context for troubleshooting
  - Establishes consistent patterns for future development

Resolves issue #21: Error handling standardization

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-26 16:35:13 +02:00

127 lines
3.1 KiB
Python

"""
Markitect domain-specific exceptions.
This module provides a hierarchy of exceptions for the Markitect markdown processing system.
All exceptions preserve context and support proper exception chaining.
"""
from typing import Optional, Dict, Any
class MarkitectError(Exception):
"""Base exception for all Markitect operations.
Provides enhanced error context and proper exception chaining support.
Args:
message: Human-readable error description
cause: Original exception that caused this error (for chaining)
context: Additional context information as key-value pairs
"""
def __init__(self, message: str, cause: Optional[Exception] = None, context: Optional[Dict[str, Any]] = None):
super().__init__(message)
self.cause = cause
self.context = context or {}
# Automatically chain if cause is provided
if cause:
self.__cause__ = cause
def __str__(self) -> str:
"""Enhanced string representation with context."""
base_message = super().__str__()
if self.context:
context_info = ", ".join(f"{k}={v}" for k, v in self.context.items())
base_message = f"{base_message} [Context: {context_info}]"
return base_message
class DocumentError(MarkitectError):
"""Errors related to document processing and management.
Raised when:
- Document parsing fails
- Document structure is invalid
- Document metadata is corrupt
"""
pass
class ASTError(MarkitectError):
"""Errors related to Abstract Syntax Tree operations.
Raised when:
- AST parsing fails
- AST structure is invalid
- AST transformation fails
"""
pass
class CacheError(MarkitectError):
"""Errors related to cache operations.
Raised when:
- Cache read/write operations fail
- Cache corruption is detected
- Cache invalidation fails
"""
pass
class DatabaseError(MarkitectError):
"""Errors related to database operations.
Raised when:
- Database connection fails
- Query execution fails
- Data integrity violations occur
"""
pass
class SchemaError(MarkitectError):
"""Errors related to schema validation and processing.
Raised when:
- Schema validation fails
- Schema parsing errors occur
- Schema generation fails
"""
pass
class ValidationError(MarkitectError):
"""Errors related to document validation against schemas.
Raised when:
- Document doesn't match schema
- Validation rules are violated
- Required fields are missing
"""
pass
class GraphQLError(MarkitectError):
"""Errors related to GraphQL operations.
Raised when:
- GraphQL query parsing fails
- GraphQL execution errors occur
- GraphQL schema issues are encountered
"""
pass
class ConfigurationError(MarkitectError):
"""Errors related to configuration and setup.
Raised when:
- Configuration files are missing or invalid
- Environment setup is incomplete
- Required settings are not configured
"""
pass