mirror of
https://github.com/langgenius/dify.git
synced 2026-08-24 12:32:54 -04:00
891627b210
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
"""Framework-neutral errors raised by API machinery.
|
|
|
|
They deliberately do not carry Flask responses, Werkzeug exceptions, HTTP
|
|
status codes, or surface-specific wire models.
|
|
"""
|
|
|
|
from collections.abc import Sequence
|
|
from dataclasses import dataclass
|
|
from typing import ClassVar
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class ErrorDetail:
|
|
"""Structured, transport-neutral context for one machinery error."""
|
|
|
|
type: str
|
|
location: tuple[str | int, ...]
|
|
message: str
|
|
|
|
|
|
class MachineryError(Exception):
|
|
"""Base class for failures owned by API machinery.
|
|
|
|
``error_code`` is a stable semantic identifier, not an HTTP status code.
|
|
Transport adapters decide whether and how a concrete error is exposed.
|
|
"""
|
|
|
|
error_code: ClassVar[str] = "machinery_error"
|
|
default_message: ClassVar[str] = "API machinery operation failed."
|
|
|
|
def __init__(self, message: str | None = None, *, details: Sequence[ErrorDetail] = ()) -> None:
|
|
self.message = message or self.default_message
|
|
self.details = tuple(details)
|
|
super().__init__(self.message)
|
|
|
|
|
|
class AdmissionConfigurationError(MachineryError):
|
|
"""Raised when an admission declaration contains incompatible requirements."""
|
|
|
|
error_code = "invalid_admission_configuration"
|
|
default_message = "Admission configuration is invalid."
|
|
|
|
|
|
class ActiveWorkspaceRequiredError(MachineryError):
|
|
"""Raised when an admitted use case requires an active workspace but none was resolved."""
|
|
|
|
error_code = "active_workspace_required"
|
|
default_message = "Admission did not resolve an active workspace."
|