create autofill_values dict with full_cachekey straight away (#650)

This commit is contained in:
Ivan 2025-11-24 10:16:02 +03:00 committed by GitHub
parent a5f01e72bb
commit 520e20844a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 47 additions and 2 deletions

View file

@ -53,8 +53,7 @@ class DatabaseBackend(Backend):
full_cachekey = self.add_prefix(self._autofill_cachekey)
if self._cache.get(full_cachekey):
return
autofill_values = {}
autofill_values[full_cachekey] = 1
autofill_values = {full_cachekey: 1}
for key, value in self.mget(settings.CONFIG):
autofill_values[self.add_prefix(key)] = value
self._cache.set_many(autofill_values, timeout=self._autofill_timeout)

View file

@ -25,3 +25,30 @@ class TestDatabase(StorageTestsMixin, TestCase):
def tearDown(self):
settings.BACKEND = self.old_backend
class TestDatabaseWithCache(StorageTestsMixin, TestCase):
def setUp(self):
self.old_backend = settings.BACKEND
settings.BACKEND = "constance.backends.database.DatabaseBackend"
self.old_cache_backend = settings.DATABASE_CACHE_BACKEND
settings.DATABASE_CACHE_BACKEND = "default"
super().setUp()
self.config._backend._cache.clear()
def test_database_queries(self):
# Read and set to default value
with self.assertNumQueries(6):
self.assertEqual(self.config.INT_VALUE, 1)
# Read again
with self.assertNumQueries(0):
self.assertEqual(self.config.INT_VALUE, 1)
# Set value
with self.assertNumQueries(3):
self.config.INT_VALUE = 15
def tearDown(self):
settings.BACKEND = self.old_backend
settings.DATABASE_CACHE_BACKEND = self.old_cache_backend

12
tests/cache_mockup.py Normal file
View file

@ -0,0 +1,12 @@
from django.core.cache.backends.base import BaseCache
from django.core.cache.backends.locmem import LocMemCache
class Cache(BaseCache):
def __init__(self, name, params):
self._cache = LocMemCache(name, params)
self.add = self._cache.add
self.delete = self._cache.delete
self.set = self._cache.set
self.get = self._cache.get
self.clear = self._cache.clear

View file

@ -29,6 +29,13 @@ DATABASES = {
},
}
CACHES = {
"default": {
"BACKEND": "tests.cache_mockup.Cache",
"LOCATION": "locmem",
}
}
INSTALLED_APPS = (
"django.contrib.admin",
"django.contrib.staticfiles",