/ src / solace_agent_mesh / shared / exceptions / error_dto.py
error_dto.py
  1  """
  2  Standardized error response DTOs for HTTP APIs.
  3  
  4  This module provides consistent error response formats that can be used
  5  across any web application for uniform error handling.
  6  """
  7  
  8  from typing import Dict, List, Optional
  9  from pydantic import BaseModel, Field
 10  
 11  
 12  class EventErrorDTO(BaseModel):
 13      """
 14      Simplified and standardized error response format.
 15  
 16      This provides consistent error responses across all endpoints with:
 17      - message: Human-readable error description
 18      - validationDetails: Field-level validation errors (optional)
 19  
 20      Examples:
 21          404 Not Found:
 22          {
 23              "message": "Could not find User with id: 123",
 24              "validationDetails": null
 25          }
 26  
 27          422 Validation Error:
 28          {
 29              "message": "Invalid input data",
 30              "validationDetails": {
 31                  "email": ["Invalid email format"],
 32                  "name": ["Name is required"]
 33              }
 34          }
 35      """
 36      message: str = Field(..., description="Human-readable error message")
 37      validationDetails: Optional[Dict[str, List[str]]] = Field(
 38          default=None,
 39          description="Field-level validation errors"
 40      )
 41  
 42      @classmethod
 43      def create(
 44          cls,
 45          message: str,
 46          validation_details: Optional[Dict[str, List[str]]] = None
 47      ) -> "EventErrorDTO":
 48          """
 49          Create a new EventErrorDTO.
 50  
 51          Args:
 52              message: Human-readable error message
 53              validation_details: Optional field-level validation errors
 54  
 55          Returns:
 56              EventErrorDTO instance
 57          """
 58          return cls(
 59              message=message,
 60              validationDetails=validation_details
 61          )
 62  
 63      @classmethod
 64      def not_found(cls, entity_type: str, entity_id: str) -> "EventErrorDTO":
 65          """
 66          Create a 404 Not Found error with standardized message format.
 67  
 68          Args:
 69              entity_type: The type of entity (e.g., "User", "Product", "Order")
 70              entity_id: The ID that was not found
 71  
 72          Returns:
 73              EventErrorDTO with 404 message format
 74  
 75          Example:
 76              EventErrorDTO.not_found("User", "123")
 77              # Returns: {"message": "Could not find User with id: 123", "validationDetails": null}
 78          """
 79          message = f"Could not find {entity_type} with id: {entity_id}"
 80          return cls.create(message=message)
 81  
 82      @classmethod
 83      def validation_error(
 84          cls,
 85          message: str,
 86          validation_details: Dict[str, List[str]]
 87      ) -> "EventErrorDTO":
 88          """
 89          Create a validation error with field-level details.
 90  
 91          Args:
 92              message: Main validation error message
 93              validation_details: Dict mapping field names to error lists
 94  
 95          Returns:
 96              EventErrorDTO with validation details
 97  
 98          Example:
 99              EventErrorDTO.validation_error(
100                  "Invalid user data",
101                  {"email": ["Invalid format"], "age": ["Must be positive"]}
102              )
103          """
104          return cls.create(
105              message=message,
106              validation_details=validation_details
107          )