Source code for fleche.storage.memory

from dataclasses import dataclass
from typing import Any, Iterable

from .base import ValueMixin, CallMixin, StorageBackend
from .destructuring import DestructuringMixin
from ..digest import Digest
from copy import deepcopy


@dataclass(frozen=True)
[docs] class MemoryBackend(StorageBackend): """ A concrete implementation of Storage that stores values in an in-memory dictionary. """
[docs] storage: dict[Digest, Any]
[docs] def list(self) -> Iterable[Digest]: return tuple(self.storage.keys())
[docs] def put(self, value: Any, key: Digest) -> Digest: self.storage[key] = deepcopy(value) return key
[docs] def get(self, key: Digest) -> Any: return deepcopy(self.storage[key])
[docs] def _contains(self, key: Digest) -> bool: return key in self.storage
[docs] def _evict(self, key: Digest) -> None: self.storage.pop(key, None)
@dataclass(frozen=True)
[docs] class ValueMemory(ValueMixin, DestructuringMixin, MemoryBackend): ...
@dataclass(frozen=True)
[docs] class CallMemory(CallMixin, MemoryBackend): ...