import logging
from enum import Enum
class TaskError(Exception):
"""Custom exception for task failures"""
def __init__(self, message: str, error_code: str, retryable: bool = True):
self.message = message
self.error_code = error_code
self.retryable = retryable
super().__init__(message)
@hy.task(max_retries=3)
def robust_task(ctx):
try:
# Your task logic
return process_data(ctx.data)
except ConnectionError as e:
# Retryable error
logging.warning(f"Connection failed, will retry: {e}")
raise TaskError(f"Connection failed: {e}", "CONNECTION_ERROR", retryable=True)
except ValidationError as e:
# Non-retryable error
logging.error(f"Invalid data, won't retry: {e}")
raise TaskError(f"Invalid data: {e}", "VALIDATION_ERROR", retryable=False)
except Exception as e:
# Unknown error
logging.error(f"Unexpected error: {e}", exc_info=True)
raise TaskError(f"Unexpected error: {e}", "UNKNOWN_ERROR")