Source code for caspia.toolbox.storage.utils

[docs]class storage_property: def __init__(self, name, default=None, storage='storage', serialize=None, deserialize=None): self.name = name self.default = default self.storage_name = storage self._setter = lambda self, val: serialize(val) if serialize else val self._getter = lambda self, val: deserialize(val) if deserialize else val
[docs] def get_storage(self, obj): if not hasattr(obj, self.storage_name): msg = 'Object %s does not have attribute %r' % (obj, self.storage_name) raise RuntimeError(msg) return getattr(obj, self.storage_name)
def __get__(self, obj, objtype=None): if obj is None: return self with self.get_storage(obj) as s: value = s.get(self.name, self.default) return self._getter(obj, value) def __set__(self, obj, value): with self.get_storage(obj) as s: s[self.name] = self._setter(obj, value)
[docs] def setter(self, func): self._setter = func return func
[docs] def getter(self, func): self._getter = func return func