diff --git a/src/libbot/__init__.py b/src/libbot/__init__.py index fcb6220..6604090 100644 --- a/src/libbot/__init__.py +++ b/src/libbot/__init__.py @@ -1,4 +1,4 @@ -__version__ = "4.2.0" +__version__ = "4.3.0" __license__ = "GPL3" __author__ = "Profitroll" diff --git a/src/libbot/cache/classes/cache.py b/src/libbot/cache/classes/cache.py index 8b0f617..5f9846c 100644 --- a/src/libbot/cache/classes/cache.py +++ b/src/libbot/cache/classes/cache.py @@ -1,5 +1,5 @@ from abc import ABC, abstractmethod -from typing import Any, Dict +from typing import Any, Dict, Optional import pymemcache import redis @@ -27,16 +27,16 @@ class Cache(ABC): pass @abstractmethod - def set_json(self, key: str, value: Any) -> None: + def set_json(self, key: str, value: Any, ttl_seconds: Optional[int] = None) -> None: # TODO This method must also carry out ObjectId conversion! pass @abstractmethod - def set_string(self, key: str, value: str) -> None: + def set_string(self, key: str, value: str, ttl_seconds: Optional[int] = None) -> None: pass @abstractmethod - def set_object(self, key: str, value: Any) -> None: + def set_object(self, key: str, value: Any, ttl_seconds: Optional[int] = None) -> None: pass @abstractmethod diff --git a/src/libbot/cache/classes/cache_memcached.py b/src/libbot/cache/classes/cache_memcached.py index f592b1d..a88c476 100644 --- a/src/libbot/cache/classes/cache_memcached.py +++ b/src/libbot/cache/classes/cache_memcached.py @@ -69,28 +69,28 @@ class CacheMemcached(Cache): def get_object(self, key: str) -> Any | None: raise NotImplementedError() - def set_json(self, key: str, value: Any) -> None: + def set_json(self, key: str, value: Any, ttl_seconds: Optional[int] = None) -> None: key = self._get_prefixed_key(key) try: - self.client.set(key, _json_to_string(value)) + self.client.set(key, _json_to_string(value), expire=0 if ttl_seconds is None else ttl_seconds) logger.debug("Set json cache key '%s'", key) except Exception as exc: logger.error("Could not set json cache key '%s' due to: %s", key, exc) return None - def set_string(self, key: str, value: str) -> None: + def set_string(self, key: str, value: str, ttl_seconds: Optional[int] = None) -> None: key = self._get_prefixed_key(key) try: - self.client.set(key, value) + self.client.set(key, value, expire=0 if ttl_seconds is None else ttl_seconds) logger.debug("Set string cache key '%s'", key) except Exception as exc: logger.error("Could not set string cache key '%s' due to: %s", key, exc) return None # TODO Implement binary serialization - def set_object(self, key: str, value: Any) -> None: + def set_object(self, key: str, value: Any, ttl_seconds: Optional[int] = None) -> None: raise NotImplementedError() def delete(self, key: str) -> None: diff --git a/src/libbot/cache/classes/cache_redis.py b/src/libbot/cache/classes/cache_redis.py index 797a866..d70076a 100644 --- a/src/libbot/cache/classes/cache_redis.py +++ b/src/libbot/cache/classes/cache_redis.py @@ -69,28 +69,28 @@ class CacheRedis(Cache): def get_object(self, key: str) -> Any | None: raise NotImplementedError() - def set_json(self, key: str, value: Any) -> None: + def set_json(self, key: str, value: Any, ttl_seconds: Optional[int] = None) -> None: key = self._get_prefixed_key(key) try: - self.client.set(key, _json_to_string(value)) + self.client.set(key, _json_to_string(value), ex=ttl_seconds) logger.debug("Set json cache key '%s'", key) except Exception as exc: logger.error("Could not set json cache key '%s' due to: %s", key, exc) return None - def set_string(self, key: str, value: str) -> None: + def set_string(self, key: str, value: str, ttl_seconds: Optional[int] = None) -> None: key = self._get_prefixed_key(key) try: - self.client.set(key, value) + self.client.set(key, value, ex=ttl_seconds) logger.debug("Set string cache key '%s'", key) except Exception as exc: logger.error("Could not set string cache key '%s' due to: %s", key, exc) return None # TODO Implement binary serialization - def set_object(self, key: str, value: Any) -> None: + def set_object(self, key: str, value: Any, ttl_seconds: Optional[int] = None) -> None: raise NotImplementedError() def delete(self, key: str) -> None: