mirror of
https://github.com/langgenius/dify.git
synced 2026-11-11 22:02:23 +08:00
Co-authored-by: zxhlyh <jasonapring2015@outlook.com> Co-authored-by: JzoNg <jzongcode@gmail.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
"""Application errors raised by Human Input v2 Channel Management services."""
|
|
|
|
from enum import StrEnum
|
|
|
|
|
|
class ProviderFailureKind(StrEnum):
|
|
INVALID_CREDENTIALS = "invalid_credentials"
|
|
CONNECTION_FAILURE = "connection_failure"
|
|
|
|
|
|
class ChannelManagementError(Exception):
|
|
"""Base class for safe application errors translated by controllers."""
|
|
|
|
|
|
class ChannelAlreadyConfiguredError(ChannelManagementError):
|
|
"""The owner scope already contains the current singleton resource."""
|
|
|
|
|
|
class ChannelNotFoundError(ChannelManagementError):
|
|
"""The addressed kind, identity, or trusted owner scope does not match."""
|
|
|
|
|
|
class ProviderConfigurationUpdatedError(ChannelManagementError):
|
|
"""The submitted opaque version no longer names the current resource revision."""
|
|
|
|
|
|
class ReplacementRequiredError(ChannelManagementError):
|
|
"""The requested IM update changes provider installation identity."""
|
|
|
|
|
|
class ChannelProviderError(ChannelManagementError):
|
|
"""Expected provider failure with credential-free diagnostics for the user."""
|
|
|
|
def __init__(
|
|
self,
|
|
kind: ProviderFailureKind,
|
|
status_description: str,
|
|
*,
|
|
provider_error_code: str | None = None,
|
|
missing_permissions: tuple[str, ...] = (),
|
|
http_status: int | None = None,
|
|
) -> None:
|
|
if http_status is not None:
|
|
status_description += f" HTTP status: {http_status}."
|
|
if provider_error_code is not None:
|
|
status_description += f" API error code: {provider_error_code}."
|
|
if missing_permissions:
|
|
status_description += f" Missing permissions: {', '.join(missing_permissions)}."
|
|
super().__init__(status_description)
|
|
self.kind = kind
|
|
self.status_description = status_description
|
|
self.http_status = http_status
|
|
self.provider_error_code = provider_error_code
|
|
|
|
|
|
class UnexpectedChannelProviderError(ChannelManagementError):
|
|
"""Detail-free boundary for unclassified provider or credential failures."""
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("channel provider operation failed")
|
|
|
|
|
|
__all__ = [
|
|
"ChannelAlreadyConfiguredError",
|
|
"ChannelManagementError",
|
|
"ChannelNotFoundError",
|
|
"ChannelProviderError",
|
|
"ProviderConfigurationUpdatedError",
|
|
"ProviderFailureKind",
|
|
"ReplacementRequiredError",
|
|
"UnexpectedChannelProviderError",
|
|
]
|