mirror of
https://github.com/jazzband/django-constance.git
synced 2026-03-16 22:40:24 +00:00
Added ability to prefix database values. Fixes #24.
This commit is contained in:
parent
21344d9168
commit
e9d937be5a
5 changed files with 24 additions and 4 deletions
|
|
@ -128,6 +128,12 @@ the ``CACHES`` setting. E.g.::
|
|||
}
|
||||
CONSTANCE_DATABASE_CACHE_BACKEND = 'default'
|
||||
|
||||
Just like the Redis backend you can set an optional prefix that is used during
|
||||
database interactions. To keep backward compatibility it defaults to ``''``
|
||||
(an empty string). To use something else do this::
|
||||
|
||||
CONSTANCE_DATABASE_PREFIX = 'constance:myproject:'
|
||||
|
||||
.. _django-picklefield: http://pypi.python.org/pypi/django-picklefield/
|
||||
|
||||
Usage
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import itertools
|
||||
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.db.models.signals import post_save
|
||||
from django.core.cache import get_cache
|
||||
|
|
@ -16,6 +18,7 @@ if settings.DATABASE_CACHE_BACKEND:
|
|||
"it to a backend that supports cross-process caching."
|
||||
% settings.DATABASE_CACHE_BACKEND)
|
||||
|
||||
|
||||
class DatabaseBackend(Backend):
|
||||
def __init__(self):
|
||||
from constance.backends.database.models import Constance
|
||||
|
|
@ -27,11 +30,19 @@ class DatabaseBackend(Backend):
|
|||
# Clear simple cache.
|
||||
post_save.connect(self.clear, sender=self._model)
|
||||
|
||||
def add_prefix(self, key):
|
||||
return "%s%s" % (self._prefix, key)
|
||||
|
||||
def mget(self, keys):
|
||||
for const in self._model._default_manager.filter(key__in=keys):
|
||||
yield const.key, const.value
|
||||
if not keys:
|
||||
return
|
||||
prefixed_keys = [self.add_prefix(key) for key in keys]
|
||||
stored = self._model._default_manager.filter(key__in=prefixed_keys)
|
||||
for key, const in itertools.izip(keys, stored):
|
||||
yield key, const.value
|
||||
|
||||
def get(self, key):
|
||||
key = self.add_prefix(key)
|
||||
value = None
|
||||
if db_cache:
|
||||
value = db_cache.get(key)
|
||||
|
|
@ -47,7 +58,7 @@ class DatabaseBackend(Backend):
|
|||
|
||||
def set(self, key, value):
|
||||
constance, created = self._model._default_manager.get_or_create(
|
||||
key=key, defaults={'value': value}
|
||||
key=self.add_prefix(key), defaults={'value': value}
|
||||
)
|
||||
if not created:
|
||||
constance.value = value
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ except ImportError:
|
|||
"django-picklefield which is required for "
|
||||
"the constance database backend.")
|
||||
|
||||
|
||||
class Constance(models.Model):
|
||||
key = models.CharField(max_length=255, unique=True)
|
||||
value = PickledObjectField()
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ class RedisBackend(Backend):
|
|||
|
||||
def __init__(self):
|
||||
super(RedisBackend, self).__init__()
|
||||
self._prefix = settings.PREFIX
|
||||
self._prefix = settings.REDIS_PREFIX
|
||||
connection_cls = settings.CONNECTION_CLASS
|
||||
if connection_cls is not None:
|
||||
self._rd = utils.import_module_attr(connection_cls)()
|
||||
|
|
|
|||
|
|
@ -21,4 +21,6 @@ REDIS_CONNECTION = getattr(settings, 'CONSTANCE_REDIS_CONNECTION',
|
|||
DATABASE_CACHE_BACKEND = getattr(settings, 'CONSTANCE_DATABASE_CACHE_BACKEND',
|
||||
None)
|
||||
|
||||
DATABASE_PREFIX = getattr(settings, 'CONSTANCE_DATABASE_PREFIX', '')
|
||||
|
||||
SUPERUSER_ONLY = getattr(settings, 'CONSTANCE_SUPERUSER_ONLY', True)
|
||||
|
|
|
|||
Loading…
Reference in a new issue