Skip to content

Cache Exceptions API

Exception classes specific to the cache module with structured error metadata.

Base Cache Exception

CacheException

CacheException

Bases: JPYCacheError

Base cache exception with structured context.

Source code in src/jinpy_utils/cache/exceptions.py
class CacheException(JPYCacheError):
    """Base cache exception with structured context."""

    def __init__(  # noqa: PLR0913
        self,
        message: str,
        *,
        error_code: str = "CACHE_ERROR",
        operation: CacheOperation | None = None,
        error_type: CacheErrorType = CacheErrorType.OPERATION,
        cache_key: str | None = None,
        backend_name: str | None = None,
        backend_type: str | None = None,
        **kwargs: Any,
    ) -> None:
        details = kwargs.pop("details", {})
        if operation:
            details["operation"] = operation.value
        if error_type:
            details["error_type"] = error_type.value
        if cache_key:
            details["cache_key"] = cache_key
        if backend_name:
            details["backend_name"] = backend_name
        if backend_type:
            details["backend_type"] = backend_type

        super().__init__(
            message=message,
            cache_key=cache_key,
            cache_backend=backend_name or backend_type,
            operation=operation.value if operation else None,
            details=details,
            suggestions=kwargs.pop(
                "suggestions",
                [
                    "Check cache backend connectivity",
                    "Verify cache key format",
                    "Ensure sufficient memory/storage",
                    "Check cache backend configuration",
                ],
            ),
            **kwargs,
        )
        self.operation = operation
        self.error_type = error_type
        self.backend_name = backend_name
        self.backend_type = backend_type

Functions

__init__

__init__(
    message: str,
    *,
    error_code: str = "CACHE_ERROR",
    operation: CacheOperation | None = None,
    error_type: CacheErrorType = OPERATION,
    cache_key: str | None = None,
    backend_name: str | None = None,
    backend_type: str | None = None,
    **kwargs: Any
) -> None
Source code in src/jinpy_utils/cache/exceptions.py
def __init__(  # noqa: PLR0913
    self,
    message: str,
    *,
    error_code: str = "CACHE_ERROR",
    operation: CacheOperation | None = None,
    error_type: CacheErrorType = CacheErrorType.OPERATION,
    cache_key: str | None = None,
    backend_name: str | None = None,
    backend_type: str | None = None,
    **kwargs: Any,
) -> None:
    details = kwargs.pop("details", {})
    if operation:
        details["operation"] = operation.value
    if error_type:
        details["error_type"] = error_type.value
    if cache_key:
        details["cache_key"] = cache_key
    if backend_name:
        details["backend_name"] = backend_name
    if backend_type:
        details["backend_type"] = backend_type

    super().__init__(
        message=message,
        cache_key=cache_key,
        cache_backend=backend_name or backend_type,
        operation=operation.value if operation else None,
        details=details,
        suggestions=kwargs.pop(
            "suggestions",
            [
                "Check cache backend connectivity",
                "Verify cache key format",
                "Ensure sufficient memory/storage",
                "Check cache backend configuration",
            ],
        ),
        **kwargs,
    )
    self.operation = operation
    self.error_type = error_type
    self.backend_name = backend_name
    self.backend_type = backend_type

Specific Cache Exceptions

CacheConfigurationError

CacheConfigurationError

Bases: CacheException

Configuration related cache errors.

Source code in src/jinpy_utils/cache/exceptions.py
class CacheConfigurationError(CacheException):
    """Configuration related cache errors."""

    def __init__(
        self,
        message: str,
        *,
        config_section: str | None = None,
        config_value: str | None = None,
        **kwargs: Any,
    ) -> None:
        details = kwargs.pop("details", {})
        if config_section:
            details["config_section"] = config_section
        if config_value is not None:
            details["config_value"] = config_value
        super().__init__(
            message=message,
            error_code="CACHE_CONFIGURATION_ERROR",
            operation=kwargs.pop("operation", None),
            error_type=CacheErrorType.CONFIGURATION,
            details=details,
            **kwargs,
        )

Functions

__init__

__init__(
    message: str,
    *,
    config_section: str | None = None,
    config_value: str | None = None,
    **kwargs: Any
) -> None
Source code in src/jinpy_utils/cache/exceptions.py
def __init__(
    self,
    message: str,
    *,
    config_section: str | None = None,
    config_value: str | None = None,
    **kwargs: Any,
) -> None:
    details = kwargs.pop("details", {})
    if config_section:
        details["config_section"] = config_section
    if config_value is not None:
        details["config_value"] = config_value
    super().__init__(
        message=message,
        error_code="CACHE_CONFIGURATION_ERROR",
        operation=kwargs.pop("operation", None),
        error_type=CacheErrorType.CONFIGURATION,
        details=details,
        **kwargs,
    )

CacheConnectionError

CacheConnectionError

Bases: CacheException

Connection/availability issues with remote cache services.

Source code in src/jinpy_utils/cache/exceptions.py
class CacheConnectionError(CacheException):
    """Connection/availability issues with remote cache services."""

    def __init__(self, message: str, **kwargs: Any) -> None:
        super().__init__(
            message=message,
            error_code="CACHE_CONNECTION_ERROR",
            error_type=CacheErrorType.CONNECTION,
            **kwargs,
        )

Functions

__init__

__init__(message: str, **kwargs: Any) -> None
Source code in src/jinpy_utils/cache/exceptions.py
def __init__(self, message: str, **kwargs: Any) -> None:
    super().__init__(
        message=message,
        error_code="CACHE_CONNECTION_ERROR",
        error_type=CacheErrorType.CONNECTION,
        **kwargs,
    )

CacheSerializationError

CacheSerializationError

Bases: CacheException

Serialization/deserialization failures.

Source code in src/jinpy_utils/cache/exceptions.py
class CacheSerializationError(CacheException):
    """Serialization/deserialization failures."""

    def __init__(
        self, message: str, *, cache_key: str | None = None, **kwargs: Any
    ) -> None:
        super().__init__(
            message=message,
            error_code="CACHE_SERIALIZATION_ERROR",
            operation=kwargs.pop("operation", None),
            error_type=CacheErrorType.SERIALIZATION,
            cache_key=cache_key,
            **kwargs,
        )

Functions

__init__

__init__(message: str, *, cache_key: str | None = None, **kwargs: Any) -> None
Source code in src/jinpy_utils/cache/exceptions.py
def __init__(
    self, message: str, *, cache_key: str | None = None, **kwargs: Any
) -> None:
    super().__init__(
        message=message,
        error_code="CACHE_SERIALIZATION_ERROR",
        operation=kwargs.pop("operation", None),
        error_type=CacheErrorType.SERIALIZATION,
        cache_key=cache_key,
        **kwargs,
    )

CacheKeyError

CacheKeyError

Bases: CacheException

Invalid or missing cache key errors.

Source code in src/jinpy_utils/cache/exceptions.py
class CacheKeyError(CacheException):
    """Invalid or missing cache key errors."""

    def __init__(
        self, message: str, *, cache_key: str | None = None, **kwargs: Any
    ) -> None:
        super().__init__(
            message=message,
            error_code="CACHE_KEY_ERROR",
            operation=kwargs.pop("operation", None),
            error_type=CacheErrorType.KEY_ERROR,
            cache_key=cache_key,
            **kwargs,
        )

Functions

__init__

__init__(message: str, *, cache_key: str | None = None, **kwargs: Any) -> None
Source code in src/jinpy_utils/cache/exceptions.py
def __init__(
    self, message: str, *, cache_key: str | None = None, **kwargs: Any
) -> None:
    super().__init__(
        message=message,
        error_code="CACHE_KEY_ERROR",
        operation=kwargs.pop("operation", None),
        error_type=CacheErrorType.KEY_ERROR,
        cache_key=cache_key,
        **kwargs,
    )

CacheTimeoutError

CacheTimeoutError

Bases: CacheException

Cache operation timeouts.

Source code in src/jinpy_utils/cache/exceptions.py
class CacheTimeoutError(CacheException):
    """Cache operation timeouts."""

    def __init__(
        self,
        message: str,
        *,
        timeout_seconds: float | None = None,
        **kwargs: Any,
    ) -> None:
        details = kwargs.pop("details", {})
        if timeout_seconds is not None:
            details["timeout_seconds"] = timeout_seconds
        super().__init__(
            message=message,
            error_code="CACHE_TIMEOUT_ERROR",
            operation=kwargs.pop("operation", None),
            error_type=CacheErrorType.TIMEOUT,
            details=details,
            **kwargs,
        )

Functions

__init__

__init__(
    message: str, *, timeout_seconds: float | None = None, **kwargs: Any
) -> None
Source code in src/jinpy_utils/cache/exceptions.py
def __init__(
    self,
    message: str,
    *,
    timeout_seconds: float | None = None,
    **kwargs: Any,
) -> None:
    details = kwargs.pop("details", {})
    if timeout_seconds is not None:
        details["timeout_seconds"] = timeout_seconds
    super().__init__(
        message=message,
        error_code="CACHE_TIMEOUT_ERROR",
        operation=kwargs.pop("operation", None),
        error_type=CacheErrorType.TIMEOUT,
        details=details,
        **kwargs,
    )

CacheBackendError

CacheBackendError

Bases: CacheException

Backend-specific failures.

Source code in src/jinpy_utils/cache/exceptions.py
class CacheBackendError(CacheException):
    """Backend-specific failures."""

    def __init__(self, message: str, **kwargs: Any) -> None:
        super().__init__(
            message=message,
            error_code="CACHE_BACKEND_ERROR",
            error_type=CacheErrorType.BACKEND_ERROR,
            **kwargs,
        )

Functions

__init__

__init__(message: str, **kwargs: Any) -> None
Source code in src/jinpy_utils/cache/exceptions.py
def __init__(self, message: str, **kwargs: Any) -> None:
    super().__init__(
        message=message,
        error_code="CACHE_BACKEND_ERROR",
        error_type=CacheErrorType.BACKEND_ERROR,
        **kwargs,
    )

Usage Examples

Handling configuration errors

from jinpy_utils.cache import CacheManager, CacheManagerConfig, CacheConfigurationError

try:
    CacheManager(CacheManagerConfig(backends=[]))
except CacheConfigurationError as e:
    print("Config error:", e.message)

Handling backend errors

from jinpy_utils.cache import Cache, CacheBackendError

cache = Cache()
try:
    cache.set("k", object())  # may fail for selected serializer
except CacheBackendError as e:
    print("Backend error:", e.message)