fleche.storage.base
Attributes
Exceptions
Common base class for all non-exit exceptions. |
|
Inappropriate argument value (of correct type). |
Classes
Shared functionality between value and call storages. |
|
Abstract base class for defining storage mechanisms. |
|
Helper class that provides a standard way to create an ABC using |
|
Helper class that provides a standard way to create an ABC using |
|
Helper class that provides a standard way to create an ABC using |
|
Mixin that recursively destructures collections on save/load. |
|
Storage that delegates all operations to a wrapped storage instance. |
|
Storage wrapper that recursively destructures collections. |
|
Special storage for saving |
|
Implement a CallStorage from a generic Storage. |
Module Contents
- exception fleche.storage.base.SaveError[source]
Bases:
ExceptionCommon base class for all non-exit exceptions.
- exception fleche.storage.base.AmbiguousDigestError[source]
Bases:
ValueErrorInappropriate argument value (of correct type).
- class fleche.storage.base.StorageBase[source]
Bases:
abc.ABCShared functionality between value and call storages.
- abstractmethod list() Iterable[fleche.digest.Digest][source]
- evict(key: fleche.digest.Digest | str) None[source]
Removes the entry corresponding to the key from the storage.
- abstractmethod _evict(key: fleche.digest.Digest) None[source]
- expand(key: fleche.digest.Digest | str) fleche.digest.Digest[source]
Expands a short-hand digest to the full length one.
- shrink(key: fleche.digest.Digest | str) fleche.digest.Digest[source]
Find the shortest substring that is still an unambigious reference to the same value.
- contains(key: fleche.digest.Digest | str) bool[source]
- abstractmethod _contains(key: fleche.digest.Digest) bool[source]
- class fleche.storage.base.Storage[source]
Bases:
StorageBaseAbstract base class for defining storage mechanisms.
- save(value: Any, key: fleche.digest.Digest | None = None) fleche.digest.Digest[source]
- abstractmethod _save(value: Any, key: fleche.digest.Digest) fleche.digest.Digest[source]
- load(key: fleche.digest.Digest | str) Any[source]
- abstractmethod _load(key: fleche.digest.Digest) Any[source]
- _contains(key: fleche.digest.Digest) bool[source]
- class fleche.storage.base.Digested[source]
Bases:
abc.ABCHelper class that provides a standard way to create an ABC using inheritance.
- abstractmethod underlying()[source]
Return plain underlying value, ie. list/dict/etc of nested values or their partial digests
- abstractmethod mend(storage: DestructuringMixin)[source]
- class fleche.storage.base.DigestedIterable[source]
Bases:
DigestedHelper class that provides a standard way to create an ABC using inheritance.
- underlying()[source]
Return plain underlying value, ie. list/dict/etc of nested values or their partial digests
- mend(storage: DestructuringMixin) list | tuple[source]
- class fleche.storage.base.DigestedDict[source]
Bases:
DigestedHelper class that provides a standard way to create an ABC using inheritance.
- underlying()[source]
Return plain underlying value, ie. list/dict/etc of nested values or their partial digests
- mend(storage: DestructuringMixin) dict[source]
- class fleche.storage.base.DestructuringMixin[source]
Bases:
StorageMixin that recursively destructures collections on save/load.
Place before a concrete
Storagein the MRO to add destructuring behavior. Lists, tuples, and dicts are broken apart so each element is stored independently; on load the original structure is reassembled.Example:
class DestructuringMemory(DestructuringMixin, Memory): pass # ``storage`` here is the backing dict required by ``Memory``, not a # Storage instance. dm = DestructuringMemory(storage={}) key = dm.save([1, [2, 3]]) assert dm.load(key) == [1, [2, 3]]
- _intern_rec(value: Any) tuple[Any, int | float][source]
Post-order traversal: recurse to leaves, decide inline-vs-store on the way back up.
Returns
(result, depth)where result is the plain value whendepth < remaining_depth(the element is inlined in its parent’sDigestedwrapper) or aDigestwhen the element was written to storage separately. Every node in the structure is visited exactly once (O(n)), unlike a separate depth-counting pass.
- _save(value: Any, key: fleche.digest.Digest) fleche.digest.Digest[source]
- _load(key: fleche.digest.Digest | Any) Any[source]
- class fleche.storage.base._DelegatingStorage[source]
Bases:
StorageStorage that delegates all operations to a wrapped storage instance.
- _save(value: Any, key: fleche.digest.Digest) fleche.digest.Digest[source]
- _load(key: fleche.digest.Digest) Any[source]
- _contains(key: fleche.digest.Digest) bool[source]
- _evict(key: fleche.digest.Digest) None[source]
- list() Iterable[fleche.digest.Digest][source]
- class fleche.storage.base.DestructuringStorage[source]
Bases:
DestructuringMixin,_DelegatingStorageStorage wrapper that recursively destructures collections.
This is a convenience class combining
DestructuringMixinwith delegation to a wrapped storage. Prefer usingDestructuringMixindirectly as a mixin with a concrete storage class when possible.
- class fleche.storage.base.CallStorage[source]
Bases:
StorageBaseSpecial storage for saving
Callinstances.- save(call: fleche.call.Call) fleche.digest.Digest[source]
- abstractmethod _save(call: fleche.call.Call) fleche.digest.Digest[source]
- load(key: str | fleche.digest.Digest) fleche.call.Call[source]
- abstractmethod _load(key: fleche.digest.Digest) fleche.call.Call[source]
- transform(func: Callable[[fleche.call.Call], fleche.call.Call] | None = None) None[source]
Applies a transformation function to all Call objects in the storage.
- query(template: fleche.call.QueryCall) Iterable[fleche.call.Call][source]
Find cached calls that ‘match’ the template.
Returns all calls where the given arguments, results or metadata match exactly the stored ones. Values may be given either as they are or as
Digest.
- _contains(key: fleche.digest.Digest) bool[source]
- class fleche.storage.base.CallStorageAdapter[source]
Bases:
CallStorageImplement a CallStorage from a generic Storage.
- _save(call: fleche.call.Call) fleche.digest.Digest[source]
- _load(key: fleche.digest.Digest) fleche.call.Call[source]
- _contains(key: fleche.digest.Digest) bool[source]
- _evict(key: fleche.digest.Digest) None[source]
- list() Iterable[fleche.digest.Digest][source]