mirror of
https://github.com/langgenius/dify.git
synced 2026-03-12 18:48:53 +08:00
When enterprise API returns 403/404, the response contains error JSON instead of expected data structure. Code was accessing fields directly causing KeyError → 500 Internal Server Error. Changes: - Add enterprise-specific error classes (EnterpriseAPIError, etc.) - Implement centralized error validation in EnterpriseRequest.send_request() - Extract error messages from API responses (message/error/detail fields) - Raise domain-specific errors based on HTTP status codes - Preserve backward compatibility with raise_for_status parameter This prevents KeyError crashes and returns proper HTTP error codes (403/404) instead of 500 errors.
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""Enterprise service errors."""
|
|
|
|
from services.errors.base import BaseServiceError
|
|
|
|
|
|
class EnterpriseServiceError(BaseServiceError):
|
|
"""Base exception for enterprise service errors."""
|
|
|
|
def __init__(self, description: str | None = None, status_code: int | None = None):
|
|
super().__init__(description)
|
|
self.status_code = status_code
|
|
|
|
|
|
class EnterpriseAPIError(EnterpriseServiceError):
|
|
"""Generic enterprise API error (non-2xx response)."""
|
|
|
|
pass
|
|
|
|
|
|
class EnterpriseAPINotFoundError(EnterpriseServiceError):
|
|
"""Enterprise API returned 404 Not Found."""
|
|
|
|
def __init__(self, description: str | None = None):
|
|
super().__init__(description, status_code=404)
|
|
|
|
|
|
class EnterpriseAPIForbiddenError(EnterpriseServiceError):
|
|
"""Enterprise API returned 403 Forbidden."""
|
|
|
|
def __init__(self, description: str | None = None):
|
|
super().__init__(description, status_code=403)
|
|
|
|
|
|
class EnterpriseAPIUnauthorizedError(EnterpriseServiceError):
|
|
"""Enterprise API returned 401 Unauthorized."""
|
|
|
|
def __init__(self, description: str | None = None):
|
|
super().__init__(description, status_code=401)
|
|
|
|
|
|
class EnterpriseAPIBadRequestError(EnterpriseServiceError):
|
|
"""Enterprise API returned 400 Bad Request."""
|
|
|
|
def __init__(self, description: str | None = None):
|
|
super().__init__(description, status_code=400)
|