From ebdcda5477f0b4341269e76fb1afb19277361124 Mon Sep 17 00:00:00 2001 From: RhodeCode Admin Date: Thu, 11 May 2023 12:11:16 +0200 Subject: [PATCH] caches: dbm backend needs to use bytes to list keys --- rhodecode/lib/rc_cache/backends.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rhodecode/lib/rc_cache/backends.py b/rhodecode/lib/rc_cache/backends.py index adb4ff47..3a49c364 100644 --- a/rhodecode/lib/rc_cache/backends.py +++ b/rhodecode/lib/rc_cache/backends.py @@ -41,7 +41,7 @@ from dogpile.cache.api import Serializer, Deserializer from pyramid.settings import asbool from rhodecode.lib.memory_lru_dict import LRUDict, LRUDictDebug -from rhodecode.lib.str_utils import safe_str +from rhodecode.lib.str_utils import safe_str, safe_bytes _default_max_size = 1024 @@ -146,20 +146,20 @@ class FileNamespaceBackend(PickleSerializer, file_backend.DBMBackend): def __repr__(self): return '{} `{}`'.format(self.__class__, self.filename) - def list_keys(self, prefix=''): - prefix = '{}:{}'.format(self.key_prefix, prefix) + def list_keys(self, prefix: bytes = b''): + prefix = b'%b:%b' % (safe_bytes(self.key_prefix), safe_bytes(prefix)) - def cond(v): + def cond(dbm_key: bytes): if not prefix: return True - if v.startswith(prefix): + if dbm_key.startswith(prefix): return True return False with self._dbm_file(True) as dbm: try: - return list(filter(cond, list(dbm.keys()))) + return list(filter(cond, dbm.keys())) except Exception: log.error('Failed to fetch DBM keys from DB: %s', self.get_store()) raise