Skip to content

Instantly share code, notes, and snippets.

@imneonizer
Created April 11, 2022 11:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save imneonizer/fe89070c84b9b6ecc12915fa12e290fa to your computer and use it in GitHub Desktop.
Save imneonizer/fe89070c84b9b6ecc12915fa12e290fa to your computer and use it in GitHub Desktop.
import redis
import fakeredis
import ujson
from contextlib import suppress
class RedisClient:
def __init__(self, host=None, port=6379, db=0, prefix='libtorrent'):
self.prefix = prefix
self.host = host
if self.host is None:
self.r = fakeredis.FakeStrictRedis(decode_responses=True)
else:
self.r = redis.Redis(host=host, port=port,
db=db, decode_responses=True)
def eval(self, value):
with suppress(Exception):
return eval(value)
return value
def set(self, key, value, overwrite=False):
key = str(key).strip()
if overwrite:
self.delete(key)
if isinstance(value, dict):
for (k, v) in value.items():
self.r.set(f"{self.prefix}.{key}.{k}", str(v))
else:
self.r.set(f"{self.prefix}.{key}", str(value))
def get(self, key):
key = str(key).strip()
value = self.r.get(f"{self.prefix}.{key}")
if value is not None:
return self.eval(value)
keys = list(self.r.scan_iter(f"{self.prefix}.{key}.*"))
if keys:
data = {}
for k in keys:
orig_key = k.lstrip(self.prefix)[1:].lstrip(key)[1:]
data[orig_key] = self.eval(self.r.get(k))
return data
def all_keys(self):
return list(self.r.scan_iter(f"{self.prefix}.*"))
def parent_keys(self):
return set([x.lstrip(f"{self.prefix}.").split(".")[0]
for x in list(self.r.scan_iter(f"{self.prefix}.*"))])
def delete(self, key):
keys = list(self.r.scan_iter(f"{self.prefix}.{key}*"))
if keys:
[self.r.delete(k) for k in keys]
def purge(self):
self.delete("*")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment