From dc463ab229645bbf5d0ec8375861bfe6e46172e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jani=20Moln=C3=A1r?= <128060390+FormJani@users.noreply.github.com> Date: Wed, 13 Nov 2024 13:55:14 +0100 Subject: [PATCH 1/2] Fix memcached return default on falsy values When a falsy value is returned from cache via memcached backend, it returns None (the default) instead, of the cached value. This is the same issue as with the Redis backend, which was fixed here: https://github.com/korfuri/django-prometheus/commit/1860549c3f8db1a0175995826404561f760369e2 --- django_prometheus/cache/backends/memcached.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/django_prometheus/cache/backends/memcached.py b/django_prometheus/cache/backends/memcached.py index b3902f47..7150abd5 100644 --- a/django_prometheus/cache/backends/memcached.py +++ b/django_prometheus/cache/backends/memcached.py @@ -13,9 +13,10 @@ def get(self, key, default=None, version=None): cached = super().get(key, default=None, version=version) if cached is not None: django_cache_hits_total.labels(backend="memcached").inc() - else: - django_cache_misses_total.labels(backend="memcached").inc() - return cached or default + return cached + + django_cache_misses_total.labels(backend="memcached").inc() + return default class PyLibMCCache(MemcachedPrometheusCacheMixin, memcached.PyLibMCCache): From 4730884f2fa7168641c9180d69185c2ee78b56e3 Mon Sep 17 00:00:00 2001 From: FormJani Date: Thu, 14 Nov 2024 14:40:28 +0100 Subject: [PATCH 2/2] fix cached or default expression swallowing falsy value --- .../cache/backends/django_memcached_consul.py | 7 ++++--- django_prometheus/cache/backends/filebased.py | 7 ++++--- django_prometheus/cache/backends/locmem.py | 7 ++++--- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/django_prometheus/cache/backends/django_memcached_consul.py b/django_prometheus/cache/backends/django_memcached_consul.py index 48c5034d..6dca5cb0 100644 --- a/django_prometheus/cache/backends/django_memcached_consul.py +++ b/django_prometheus/cache/backends/django_memcached_consul.py @@ -15,6 +15,7 @@ def get(self, key, default=None, version=None): cached = super().get(key, default=None, version=version) if cached is not None: django_cache_hits_total.labels(backend="django_memcached_consul").inc() - else: - django_cache_misses_total.labels(backend="django_memcached_consul").inc() - return cached or default + return cached + + django_cache_misses_total.labels(backend="django_memcached_consul").inc() + return default diff --git a/django_prometheus/cache/backends/filebased.py b/django_prometheus/cache/backends/filebased.py index dced9015..80c6565c 100644 --- a/django_prometheus/cache/backends/filebased.py +++ b/django_prometheus/cache/backends/filebased.py @@ -15,6 +15,7 @@ def get(self, key, default=None, version=None): cached = super().get(key, default=None, version=version) if cached is not None: django_cache_hits_total.labels(backend="filebased").inc() - else: - django_cache_misses_total.labels(backend="filebased").inc() - return cached or default + return cached + + django_cache_misses_total.labels(backend="filebased").inc() + return default diff --git a/django_prometheus/cache/backends/locmem.py b/django_prometheus/cache/backends/locmem.py index 1138f84c..e30accf6 100644 --- a/django_prometheus/cache/backends/locmem.py +++ b/django_prometheus/cache/backends/locmem.py @@ -15,6 +15,7 @@ def get(self, key, default=None, version=None): cached = super().get(key, default=None, version=version) if cached is not None: django_cache_hits_total.labels(backend="locmem").inc() - else: - django_cache_misses_total.labels(backend="locmem").inc() - return cached or default + return cached + + django_cache_misses_total.labels(backend="locmem").inc() + return default