Module hdict.content.entry.cached
Expand source code
from hosh import Hosh
from hdict.content.entry import AbsEntry, Unevaluated
def kindid(fid):
return (fid ** Hosh("»hdict·PREFIX KIND«".encode())).id
def getkind(storage, hosh):
return storage[kindid(hosh)]
class Cached(AbsEntry):
"""Layer to enable delaying fetching from storage"""
def __init__(self, id: str, storage: dict, entry: AbsEntry = None):
self.hosh = Hosh.fromid(id)
self.storage = storage
self.entry = entry
@property
def kind(self):
return getkind(self.storage, self.hosh)
@property
def value(self):
from hdict import frozenhdict
if isinstance(self._value, Unevaluated):
if self.entry and self.entry.isevaluated:
self._value = self.entry.value
elif (ret := frozenhdict.fetch(self.id, self.storage)) is not None:
self._value = ret
elif self.entry is None: # pragma: no cover
raise Exception(f"id `{self.id}` not found.")
else:
from hdict.persistence.stored import Stored
self._value = self.entry.value
self.storage[self.id] = Stored(self._value)
return self._value
def __repr__(self):
return f"↑↓ cached at `{type(self.storage).__name__}`·"
# def __str__(self):
Functions
def getkind(storage, hosh)
-
Expand source code
def getkind(storage, hosh): return storage[kindid(hosh)]
def kindid(fid)
-
Expand source code
def kindid(fid): return (fid ** Hosh("»hdict·PREFIX KIND«".encode())).id
Classes
class Cached (id: str, storage: dict, entry: AbsEntry = None)
-
Layer to enable delaying fetching from storage
Expand source code
class Cached(AbsEntry): """Layer to enable delaying fetching from storage""" def __init__(self, id: str, storage: dict, entry: AbsEntry = None): self.hosh = Hosh.fromid(id) self.storage = storage self.entry = entry @property def kind(self): return getkind(self.storage, self.hosh) @property def value(self): from hdict import frozenhdict if isinstance(self._value, Unevaluated): if self.entry and self.entry.isevaluated: self._value = self.entry.value elif (ret := frozenhdict.fetch(self.id, self.storage)) is not None: self._value = ret elif self.entry is None: # pragma: no cover raise Exception(f"id `{self.id}` not found.") else: from hdict.persistence.stored import Stored self._value = self.entry.value self.storage[self.id] = Stored(self._value) return self._value def __repr__(self): return f"↑↓ cached at `{type(self.storage).__name__}`·" # def __str__(self):
Ancestors
Instance variables
var kind
-
Expand source code
@property def kind(self): return getkind(self.storage, self.hosh)
var value : Union[object, Callable]
-
Expand source code
@property def value(self): from hdict import frozenhdict if isinstance(self._value, Unevaluated): if self.entry and self.entry.isevaluated: self._value = self.entry.value elif (ret := frozenhdict.fetch(self.id, self.storage)) is not None: self._value = ret elif self.entry is None: # pragma: no cover raise Exception(f"id `{self.id}` not found.") else: from hdict.persistence.stored import Stored self._value = self.entry.value self.storage[self.id] = Stored(self._value) return self._value
Inherited members