From 02bb7ee705c00229c202e253acb754c65c877339 Mon Sep 17 00:00:00 2001 From: Kariton <67470612+Kariton@users.noreply.github.com> Date: Sun, 2 Jun 2024 21:52:39 +0200 Subject: [PATCH 1/2] add 'delete' to Storage class --- signalbot/storage.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/signalbot/storage.py b/signalbot/storage.py index 847a0e8..9b4e8a8 100644 --- a/signalbot/storage.py +++ b/signalbot/storage.py @@ -10,6 +10,9 @@ def exists(self, key: str) -> bool: def read(self, key: str) -> Any: raise NotImplementedError + def delete(self, *keys: str) -> int: + raise NotImplementedError + def save(self, key: str, object: Any): raise NotImplementedError @@ -33,6 +36,17 @@ def read(self, key: str) -> Any: except Exception as e: raise StorageError(f"InMemory load failed: {e}") + def delete(self, *keys: str) -> int: + try: + deleted_count = 0 + for key in keys: + if key in self._storage: + del self._storage[key] + deleted_count += 1 + return deleted_count + except Exception as e: + raise StorageError(f"InMemory delete failed: {e}") + def save(self, key: str, object: Any): try: object_str = json.dumps(object) @@ -57,6 +71,12 @@ def read(self, key: str) -> Any: except Exception as e: raise StorageError(f"Redis load failed: {e}") + def delete(self, *keys: str) -> int: + try: + return self._redis.delete(*keys) + except Exception as e: + raise StorageError(f"Redis delete failed: {e}") + def save(self, key: str, object: Any): try: object_str = json.dumps(object) From 240ddba642244eba4c4559d19d1a3e11d477c06a Mon Sep 17 00:00:00 2001 From: Kariton <67470612+Kariton@users.noreply.github.com> Date: Sun, 2 Jun 2024 21:52:39 +0200 Subject: [PATCH 2/2] make 'redis.Redis' class directly available through Storage class --- signalbot/storage.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/signalbot/storage.py b/signalbot/storage.py index 9b4e8a8..7e0a137 100644 --- a/signalbot/storage.py +++ b/signalbot/storage.py @@ -4,6 +4,9 @@ class Storage: + def __init__(self): + self.redis = None + def exists(self, key: str) -> bool: raise NotImplementedError @@ -57,14 +60,14 @@ def save(self, key: str, object: Any): class RedisStorage(Storage): def __init__(self, host, port): - self._redis = redis.Redis(host=host, port=port, db=0) + self.redis = redis.Redis(host=host, port=port, db=0) def exists(self, key: str) -> bool: - return self._redis.exists(key) + return self.redis.exists(key) def read(self, key: str) -> Any: try: - result_bytes = self._redis.get(key) + result_bytes = self.redis.get(key) result_str = result_bytes.decode("utf-8") result_dict = json.loads(result_str) return result_dict @@ -73,13 +76,13 @@ def read(self, key: str) -> Any: def delete(self, *keys: str) -> int: try: - return self._redis.delete(*keys) + return self.redis.delete(*keys) except Exception as e: raise StorageError(f"Redis delete failed: {e}") def save(self, key: str, object: Any): try: object_str = json.dumps(object) - self._redis.set(key, object_str) + self.redis.set(key, object_str) except Exception as e: raise StorageError(f"Redis save failed: {e}")