From 94fabdf7c300d3d164d25e7db1b60c77612c943c Mon Sep 17 00:00:00 2001 From: Camilo Nova Date: Wed, 14 Sep 2016 12:22:32 -0500 Subject: [PATCH] Added signal on change, refs #158 --- constance/__init__.py | 4 ++++ constance/apps.py | 4 +--- constance/backends/database/__init__.py | 7 +++++-- constance/backends/redisd.py | 2 ++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/constance/__init__.py b/constance/__init__.py index 21c429c..5ed4087 100644 --- a/constance/__init__.py +++ b/constance/__init__.py @@ -1,3 +1,4 @@ +import django.dispatch from django.utils.functional import LazyObject __version__ = '1.2.1' @@ -10,4 +11,7 @@ class LazyConfig(LazyObject): from .base import Config self._wrapped = Config() + config = LazyConfig() + +updated_signal = django.dispatch.Signal(providing_args=['key', 'value']) diff --git a/constance/apps.py b/constance/apps.py index bd8a894..8aebcc5 100644 --- a/constance/apps.py +++ b/constance/apps.py @@ -1,5 +1,4 @@ from django.db.models import signals -from django import VERSION from django.apps import AppConfig from django.utils.translation import ugettext_lazy as _ @@ -22,11 +21,10 @@ class ConstanceConfig(AppConfig): from django.contrib.contenttypes.models import ContentType if ContentType._meta.installed and Permission._meta.installed: - extra = {} if VERSION >= (1, 8) else {'name': 'config'} content_type, created = ContentType.objects.get_or_create( app_label='constance', model='config', - **extra) + ) permission, created = Permission.objects.get_or_create( name='Can change config', diff --git a/constance/backends/database/__init__.py b/constance/backends/database/__init__.py index 01cf260..6cb5a96 100644 --- a/constance/backends/database/__init__.py +++ b/constance/backends/database/__init__.py @@ -5,6 +5,7 @@ from django.db.models.signals import post_save from .. import Backend from ... import settings +from ... import updated_signal class DatabaseBackend(Backend): @@ -25,8 +26,8 @@ class DatabaseBackend(Backend): if isinstance(self._cache, LocMemCache): raise ImproperlyConfigured( "The CONSTANCE_DATABASE_CACHE_BACKEND setting refers to a " - "subclass of Django's local-memory backend (%r). Please set " - "it to a backend that supports cross-process caching." + "subclass of Django's local-memory backend (%r). Please " + "set it to a backend that supports cross-process caching." % settings.DATABASE_CACHE_BACKEND) else: self._cache = None @@ -86,6 +87,8 @@ class DatabaseBackend(Backend): if self._cache: self._cache.set(key, value) + updated_signal.send(sender='constance', key=key, value=value) + def clear(self, sender, instance, created, **kwargs): if self._cache and not created: keys = [self.add_prefix(k) diff --git a/constance/backends/redisd.py b/constance/backends/redisd.py index abf24f4..3b24398 100644 --- a/constance/backends/redisd.py +++ b/constance/backends/redisd.py @@ -4,6 +4,7 @@ from django.utils.six.moves import zip from . import Backend from .. import settings, utils +from .. import updated_signal try: from cPickle import loads, dumps @@ -49,3 +50,4 @@ class RedisBackend(Backend): def set(self, key, value): self._rd.set(self.add_prefix(key), dumps(value)) + updated_signal.send(sender='constance', key=key, value=value)