🐛 fix(cache/manager.py): handle pickled values in get method to correctly return the value

✨ feat(cache/manager.py): add support for pickling values in set method to mimic Redis behavior
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-09-27 12:36:32 -03:00
commit 88f24d292d

View file

@ -74,13 +74,17 @@ class InMemoryCache(BaseCacheService, Service):
): ):
# Move the key to the end to make it recently used # Move the key to the end to make it recently used
self._cache.move_to_end(key) self._cache.move_to_end(key)
unpickled = pickle.loads(item["value"]) # Check if the value is pickled
return unpickled if isinstance(item["value"], bytes):
value = pickle.loads(item["value"])
else:
value = item["value"]
return value
else: else:
self.delete(key) self.delete(key)
return None return None
def set(self, key, value): def set(self, key, value, pickle=False):
""" """
Add an item to the cache. Add an item to the cache.
@ -98,8 +102,10 @@ class InMemoryCache(BaseCacheService, Service):
# Remove least recently used item # Remove least recently used item
self._cache.popitem(last=False) self._cache.popitem(last=False)
# pickle locally to mimic Redis # pickle locally to mimic Redis
pickled = pickle.dumps(value) if pickle:
self._cache[key] = {"value": pickled, "time": time.time()} value = pickle.dumps(value)
self._cache[key] = {"value": value, "time": time.time()}
def upsert(self, key, value): def upsert(self, key, value):
""" """