From 46d88815e795c8ebe4b46a5b69f0c97cd2d1f5a5 Mon Sep 17 00:00:00 2001 From: Merijn Bertels Date: Wed, 29 Jun 2011 15:17:27 +0200 Subject: [PATCH 01/10] Change permission Only Superuser can edit config settings --- constance/admin.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/constance/admin.py b/constance/admin.py index b3b477d..4b2016b 100644 --- a/constance/admin.py +++ b/constance/admin.py @@ -109,7 +109,10 @@ class ConstanceAdmin(admin.ModelAdmin): return False def has_change_permission(self, *args, **kwargs): - return True + if request.user.is_superuser: + return True + else: + return False class Config(object): From fb43e0f4d7355bc92dd20788f8d0be0298b14869 Mon Sep 17 00:00:00 2001 From: Merijn Bertels Date: Wed, 29 Jun 2011 15:25:10 +0200 Subject: [PATCH 02/10] Fix error: request into function --- constance/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constance/admin.py b/constance/admin.py index 4b2016b..61e1005 100644 --- a/constance/admin.py +++ b/constance/admin.py @@ -108,7 +108,7 @@ class ConstanceAdmin(admin.ModelAdmin): def has_delete_permission(self, *args, **kwargs): return False - def has_change_permission(self, *args, **kwargs): + def has_change_permission(self, request, obj=None, *args, **kwargs): if request.user.is_superuser: return True else: From 482d8ff78bb68140879e5b2d5a4ef34fddf8b913 Mon Sep 17 00:00:00 2001 From: Jiri Barton Date: Thu, 14 Jul 2011 21:53:17 +0800 Subject: [PATCH 03/10] fixed a serious bug with the default values --- constance/backends/redisd.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/constance/backends/redisd.py b/constance/backends/redisd.py index ce10fc5..e512f0b 100644 --- a/constance/backends/redisd.py +++ b/constance/backends/redisd.py @@ -38,10 +38,11 @@ class RedisBackend(Backend): def mget(self, keys): if not keys: - return [] + return prefixed_keys = [self.add_prefix(key) for key in keys] - values = (loads(value) for value in self._rd.mget(prefixed_keys) if value) - return itertools.izip(keys, values) + for key, value in itertools.izip(keys, self._rd.mget(prefixed_keys)): + if value: + yield key, loads(value) def set(self, key, value): self._rd.set(self.add_prefix(key), dumps(value)) From 1d10ab1b5aea9b4270cce37f68cf9e0988c296af Mon Sep 17 00:00:00 2001 From: Jiri Barton Date: Thu, 14 Jul 2011 23:42:51 +0800 Subject: [PATCH 04/10] added a test for the failing missing keys --- .../testproject/test_app/tests/test_config.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/testproject/test_app/tests/test_config.py b/tests/testproject/test_app/tests/test_config.py index 3b18953..b667871 100644 --- a/tests/testproject/test_app/tests/test_config.py +++ b/tests/testproject/test_app/tests/test_config.py @@ -76,6 +76,9 @@ class TestRedis(TestCase, TestStorage): def setUp(self): self.old_backend = settings.BACKEND settings.BACKEND = 'constance.backends.redisd.RedisBackend' + del sys.modules['constance'] + from constance import config + config._backend._rd.clear() def tearDown(self): del sys.modules['constance'] @@ -85,6 +88,30 @@ class TestRedis(TestCase, TestStorage): import constance constance.config = Config() + def testMissingValues(self): + from constance import config + + # set some values and leave out others + config.LONG_VALUE = 654321L + config.BOOL_VALUE = False + config.UNICODE_VALUE = 'Québec'.decode('utf-8') + config.DECIMAL_VALUE = Decimal('1.2') + config.DATETIME_VALUE = datetime(1977, 10, 2) + config.DATE_VALUE = date(2001, 12, 20) + config.TIME_VALUE = time(1, 59, 0) + + self.assertEquals(config.INT_VALUE, 1) # this should be the default value + self.assertEquals(config.LONG_VALUE, 654321L) + self.assertEquals(config.BOOL_VALUE, False) + self.assertEquals(config.STRING_VALUE, 'Hello world') # this should be the default value + self.assertEquals(config.UNICODE_VALUE, 'Québec'.decode('utf-8')) + self.assertEquals(config.DECIMAL_VALUE, Decimal('1.2')) + self.assertEquals(config.DATETIME_VALUE, datetime(1977, 10, 2)) + self.assertEquals(config.FLOAT_VALUE, 3.1415926536) # this should be the default value + self.assertEquals(config.DATE_VALUE, date(2001, 12, 20)) + self.assertEquals(config.TIME_VALUE, time(1, 59, 0)) + + class TestDatabase(TestCase, TestStorage): def setUp(self): From 5741e17425f5cbd95fdd614db7fe490316708708 Mon Sep 17 00:00:00 2001 From: saw2th Date: Fri, 12 Aug 2011 00:47:14 +0800 Subject: [PATCH 05/10] fix psycopg2 "can't adapt" error on save of a config. value from the admin pages. --- constance/admin.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/constance/admin.py b/constance/admin.py index 61e1005..6b5db60 100644 --- a/constance/admin.py +++ b/constance/admin.py @@ -13,6 +13,7 @@ from django.shortcuts import render_to_response from django.template.context import RequestContext from django.utils.formats import localize from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext from constance import config, settings @@ -72,7 +73,7 @@ class ConstanceAdmin(admin.ModelAdmin): form = ConstanceForm(request.POST) if form.is_valid(): form.save() - self.message_user(request, _('Live settings updated successfully.')) + self.message_user(request, ugettext('Live settings updated successfully.')) return HttpResponseRedirect('.') context = { 'config': [], From e3e44b6eef905017c1499e0c42daf9278b49e252 Mon Sep 17 00:00:00 2001 From: Jiri Barton Date: Wed, 17 Aug 2011 17:25:26 +0800 Subject: [PATCH 06/10] streamlined ugettext --- constance/admin.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/constance/admin.py b/constance/admin.py index 6b5db60..f1721bd 100644 --- a/constance/admin.py +++ b/constance/admin.py @@ -12,8 +12,7 @@ from django.http import HttpResponseRedirect from django.shortcuts import render_to_response from django.template.context import RequestContext from django.utils.formats import localize -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ugettext +from django.utils.translation import ugettext as _ from constance import config, settings @@ -73,7 +72,7 @@ class ConstanceAdmin(admin.ModelAdmin): form = ConstanceForm(request.POST) if form.is_valid(): form.save() - self.message_user(request, ugettext('Live settings updated successfully.')) + self.message_user(request, _('Live settings updated successfully.')) return HttpResponseRedirect('.') context = { 'config': [], From e8b13b061952c971d4b8eb4dc7b9b48ce1b1f449 Mon Sep 17 00:00:00 2001 From: Marcin Baran Date: Mon, 29 Aug 2011 21:31:44 +0800 Subject: [PATCH 07/10] __dir__ in config.py now return list --- constance/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constance/config.py b/constance/config.py index 79751db..ed2afbc 100644 --- a/constance/config.py +++ b/constance/config.py @@ -26,4 +26,4 @@ class Config(object): self._backend.set(key, value) def __dir__(self): - return settings.CONFIG.iterkeys() + return settings.CONFIG.keys() From 647a8627c07c6777be0af4d0c1f13c81cbd649fd Mon Sep 17 00:00:00 2001 From: Marcin Baran Date: Mon, 29 Aug 2011 21:56:09 +0800 Subject: [PATCH 08/10] Fix DatabaseBackend clear --- constance/backends/database/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constance/backends/database/__init__.py b/constance/backends/database/__init__.py index 6798480..4d93566 100644 --- a/constance/backends/database/__init__.py +++ b/constance/backends/database/__init__.py @@ -56,4 +56,4 @@ class DatabaseBackend(Backend): def clear(self, sender, instance, created, **kwargs): if db_cache and not created: - db_cache.clear() + db_cache.delete_many(settings.CONFIG.keys()) From dc471498803d966ee1d577e1b797fac9321ca57a Mon Sep 17 00:00:00 2001 From: Merijn Bertels Date: Wed, 21 Sep 2011 16:24:15 +0200 Subject: [PATCH 09/10] update admin url for 1.4 --- constance/admin.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/constance/admin.py b/constance/admin.py index f1721bd..75ae631 100644 --- a/constance/admin.py +++ b/constance/admin.py @@ -57,6 +57,10 @@ class ConstanceAdmin(admin.ModelAdmin): self.admin_site.admin_view(self.changelist_view), name='%s_%s_changelist' % info ), + url(r'^$', + self.admin_site.admin_view(self.changelist_view), + name='%s_%s_add' % info + ), ) @csrf_protect_m From 1bdb21fe38be7a24bfabf385e6c809e6eb0d7413 Mon Sep 17 00:00:00 2001 From: Merijn Bertels Date: Wed, 21 Sep 2011 16:25:46 +0200 Subject: [PATCH 10/10] update admin url for 1.4 (root_path) --- constance/admin.py | 1 - 1 file changed, 1 deletion(-) diff --git a/constance/admin.py b/constance/admin.py index 75ae631..459e47a 100644 --- a/constance/admin.py +++ b/constance/admin.py @@ -80,7 +80,6 @@ class ConstanceAdmin(admin.ModelAdmin): return HttpResponseRedirect('.') context = { 'config': [], - 'root_path': self.admin_site.root_path, 'title': _('Constance config'), 'app_label': 'constance', 'opts': Config._meta,