def hget_item(self, key, dict_key, recover=None, ttl=None, arguments=([], {}), **kw): item_key = self.redis.get(key) value = self.redis.hget(item_key, dict_key) if item_key else None # return None if cannot recover the value if value is None and recover is None: return None # Trying to recover the value if value is None: return self.hset_item(key, dict_key, lambda: recover(*arguments[0], **arguments[1]), ttl=ttl) else: return deserialize(value)
def get_list(self, key, recover=None, ttl=None, arguments=([], {}), key_extractor=None): # First, get the keys list value = self.redis.get(key) if value is None and recover is None: return None, None # Trying to recover the value if value is None: return self.set_list( key, lambda: recover(*arguments[0], **arguments[1]), ttl=ttl, key_extractor=key_extractor ) else: metadata, item_keys = deserialize(value) return metadata, [self.get_item(item_key) for item_key in item_keys]