Source code for rath.memory.errors

"""Memory-plane exceptions (parallel to :mod:`rath.backend.errors`)."""

from __future__ import annotations

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from rath.memory.op_types import MemoryOp


__all__ = [
    "MemoryBackendError",
    "UnsupportedMemoryOp",
    "MemoryStoreClosed",
    "MemoryBackendNotFound",
    "MemoryNotFound",
    "MemoryConflict",
]


[docs] class MemoryBackendError(RuntimeError): """Base class for all :mod:`rath.memory` errors."""
[docs] class UnsupportedMemoryOp(MemoryBackendError): """Raised when a memory backend cannot service a given :class:`MemoryOp` type.""" def __init__(self, op_type: type["MemoryOp"], backend_name: str) -> None: self.op_type = op_type self.backend_name = backend_name super().__init__( f"memory backend {backend_name!r} does not support op {op_type.__name__!r}" ) def __reduce__(self) -> tuple[type, tuple[type, str]]: return (self.__class__, (self.op_type, self.backend_name))
[docs] class MemoryStoreClosed(MemoryBackendError): """Raised when an op is dispatched against an already-closed :class:`MemoryStore`.""" def __init__(self, handle: str) -> None: self.handle = handle super().__init__(f"memory store {handle!r} is already closed") def __reduce__(self) -> tuple[type, tuple[str]]: return (self.__class__, (self.handle,))
[docs] class MemoryBackendNotFound(MemoryBackendError): """Raised when a memory backend is requested by name but isn't registered.""" def __init__(self, name: str, available: list[str]) -> None: self.name = name self.available = available super().__init__( f"memory backend {name!r} is not registered; " f"available backends: {available!r}" ) def __reduce__(self) -> tuple[type, tuple[str, list[str]]]: return (self.__class__, (self.name, self.available))
[docs] class MemoryNotFound(MemoryBackendError): """Raised when an explicit URI is read but the backend has no such entry.""" def __init__(self, uri: str) -> None: self.uri = uri super().__init__(f"memory uri {uri!r} not found") def __reduce__(self) -> tuple[type, tuple[str]]: return (self.__class__, (self.uri,))
[docs] class MemoryConflict(MemoryBackendError): """Raised when a write collides with an existing entry under conflicting rules.""" def __init__(self, uri: str) -> None: self.uri = uri super().__init__(f"memory uri {uri!r} write conflict") def __reduce__(self) -> tuple[type, tuple[str]]: return (self.__class__, (self.uri,))