Spaces:
Sleeping
Sleeping
import json | |
import redis | |
class RedisDict: | |
def __init__(self, name, redis_url): | |
self.name = name | |
self.redis = redis.Redis.from_url(redis_url, decode_responses=True) | |
def __setitem__(self, key, value): | |
serialized_value = json.dumps(value) | |
self.redis.hset(self.name, key, serialized_value) | |
def __getitem__(self, key): | |
value = self.redis.hget(self.name, key) | |
if value is None: | |
raise KeyError(key) | |
return json.loads(value) | |
def __delitem__(self, key): | |
result = self.redis.hdel(self.name, key) | |
if result == 0: | |
raise KeyError(key) | |
def __contains__(self, key): | |
return self.redis.hexists(self.name, key) | |
def __len__(self): | |
return self.redis.hlen(self.name) | |
def keys(self): | |
return self.redis.hkeys(self.name) | |
def values(self): | |
return [json.loads(v) for v in self.redis.hvals(self.name)] | |
def items(self): | |
return [(k, json.loads(v)) for k, v in self.redis.hgetall(self.name).items()] | |
def get(self, key, default=None): | |
try: | |
return self[key] | |
except KeyError: | |
return default | |
def clear(self): | |
self.redis.delete(self.name) | |
def update(self, other=None, **kwargs): | |
if other is not None: | |
for k, v in other.items() if hasattr(other, "items") else other: | |
self[k] = v | |
for k, v in kwargs.items(): | |
self[k] = v | |
def setdefault(self, key, default=None): | |
if key not in self: | |
self[key] = default | |
return self[key] | |