def app_settings(request, app_label, template='dbsettings/app_settings.html'): # Determine what set of settings this editor is used for if app_label is None: settings = loading.get_all_settings() title = _('Site settings') else: settings = loading.get_app_settings(app_label) title = _('%(app)s settings') % {'app': capfirst(app_label)} # Create an editor customized for the current user editor = forms.customized_editor(request.user, settings) if request.method == 'POST': # Populate the form with user-submitted data form = editor(request.POST.copy(), request.FILES) if form.is_valid(): form.full_clean() for name, value in form.cleaned_data.items(): key = forms.RE_FIELD_NAME.match(name).groups() setting = loading.get_setting(*key) try: storage = loading.get_setting_storage(*key) current_value = setting.to_python(storage.value) except: current_value = None if current_value != setting.to_python(value): args = key + (value, ) loading.set_setting_value(*args) # Give user feedback as to which settings were changed if setting.class_name: location = setting.class_name else: location = setting.module_name update_msg = (_('Updated %(desc)s on %(location)s') % { 'desc': str(setting.description), 'location': location }) messages.add_message(request, messages.INFO, update_msg) return HttpResponseRedirect(request.path) else: # Leave the form populated with current setting values form = editor() return render(request, template, { 'title': title, 'no_settings': len(settings) == 0, 'form': form, })
def install_settings(app, created_models, verbosity=2, **kwargs): printed = False for class_name, attribute_name, value in defaults: if not get_setting_storage(app.__name__, class_name, attribute_name): if verbosity >= 2 and not printed: # Print this message only once, and only if applicable print("Installing default settings for %s" % app_label) printed = True try: set_setting_value(app.__name__, class_name, attribute_name, value) except: raise ImproperlyConfigured("%s requires dbsettings." % app_label)
def install_settings(app, created_models, verbosity=2): printed = False for class_name, attribute_name, value in defaults: if not get_setting_storage(app.__name__, class_name, attribute_name): if verbosity >= 2 and not printed: # Print this message only once, and only if applicable print "Installing default settings for %s" % app_label printed = True try: set_setting_value(app.__name__, class_name, attribute_name, value) except: raise ImproperlyConfigured("%s requires dbsettings." % app_label)
def app_settings(request, app_label, template='dbsettings/app_settings.html'): # Determine what set of settings this editor is used for if app_label is None: settings = loading.get_all_settings() title = _('Site settings') else: settings = loading.get_app_settings(app_label) title = _('%(app)s settings') % {'app': capfirst(app_label)} # Create an editor customized for the current user editor = forms.customized_editor(request.user, settings) if request.method == 'POST': # Populate the form with user-submitted data form = editor(request.POST.copy(), request.FILES) if form.is_valid(): form.full_clean() for name, value in form.cleaned_data.items(): key = forms.RE_FIELD_NAME.match(name).groups() setting = loading.get_setting(*key) try: storage = loading.get_setting_storage(*key) current_value = setting.to_python(storage.value) except: current_value = None if current_value != setting.to_python(value): args = key + (value,) loading.set_setting_value(*args) # Give user feedback as to which settings were changed if setting.class_name: location = setting.class_name else: location = setting.module_name update_msg = (_('Updated %(desc)s on %(location)s') % {'desc': six.text_type(setting.description), 'location': location}) messages.add_message(request, messages.INFO, update_msg) # Problem with settings not updated in form fields on save causing user errors. Sending to admin dash instead return HttpResponseRedirect(reverse_lazy('admin:index')) else: # Leave the form populated with current setting values form = editor() return render_to_response(template, { 'title': title, 'form': form, }, context_instance=RequestContext(request))
def app_settings(request, app_label, template='dbsettings/app_settings.html'): # Determine what set of settings this editor is used for if app_label is None: settings = loading.get_all_settings() title = 'Site settings' else: settings = loading.get_app_settings(app_label) title = '%s settings' % capfirst(app_label) # Create an editor customized for the current user editor = forms.customized_editor(request.user, settings) if request.method == 'POST': # Populate the form with user-submitted data form = editor(request.POST.copy(), request.FILES) if form.is_valid(): form.full_clean() for name, value in form.cleaned_data.items(): key = forms.re_field_name.match(name).groups() setting = loading.get_setting(*key) try: storage = loading.get_setting_storage(*key) current_value = setting.to_python(storage.value) except: current_value = None if current_value != setting.to_python(value): args = key + (value, ) loading.set_setting_value(*args) # Give user feedback as to which settings were changed if setting.class_name: location = setting.class_name else: location = setting.module_name update_msg = u'Updated %s on %s' % (unicode( setting.description), location) messages.add_message(request, messages.INFO, update_msg) return HttpResponseRedirect(request.path) else: # Leave the form populated with current setting values form = editor() return render_to_response(template, { 'title': title, 'form': form, }, context_instance=RequestContext(request))
def app_settings(request, app_label, template='dbsettings/app_settings.html'): # Determine what set of settings this editor is used for if app_label is None: settings = loading.get_all_settings() title = _('Site settings') else: settings = loading.get_app_settings(app_label) title = _('%(app)s settings') % {'app': capfirst(app_label)} # Create an editor customized for the current user editor = forms.customized_editor(request.user, settings) if request.method == 'POST': # Populate the form with user-submitted data form = editor(request.POST.copy(), request.FILES) if form.is_valid(): form.full_clean() n_changed = 0 for name, value in form.cleaned_data.items(): key = forms.RE_FIELD_NAME.match(name).groups() setting = loading.get_setting(*key) try: storage = loading.get_setting_storage(*key) current_value = setting.to_python(storage.value) except Exception, e: log.info("An exception occurred trying to convert %s, " "with value %s, to python.", name, value, exc_info=True) current_value = None if current_value != setting.to_python(value): args = key + (value,) loading.set_setting_value(*args) # Give user feedback as to which settings were changed if setting.class_name: location = setting.class_name else: location = setting.module_name update_msg = (_(u'Updated %(desc)s on %(location)s') % {'desc': unicode(setting.description), 'location': location}) messages.add_message(request, messages.INFO, update_msg) n_changed += 1 if not n_changed: no_update_msg = (_(u'Nothing was changed')) messages.add_message(request, messages.INFO, no_update_msg) return HttpResponseRedirect(request.path)
def app_settings(request, app_label, template='dbsettings/app_settings.html'): # Determine what set of settings this editor is used for if app_label is None: settings = loading.get_all_settings() title = 'Site settings' else: settings = loading.get_app_settings(app_label) title = '%s settings' % capfirst(app_label) # Create an editor customized for the current user editor = forms.customized_editor(request.user, settings) if request.method == 'POST': # Populate the form with user-submitted data form = editor(request.POST.copy(), request.FILES) if form.is_valid(): form.full_clean() for name, value in form.cleaned_data.items(): key = forms.re_field_name.match(name).groups() setting = loading.get_setting(*key) try: storage = loading.get_setting_storage(*key) current_value = setting.to_python(storage.value) except: current_value = None if current_value != setting.to_python(value): args = key + (value,) loading.set_setting_value(*args) # Give user feedback as to which settings were changed if setting.class_name: location = setting.class_name else: location = setting.module_name update_msg = u'Updated %s on %s' % (unicode(setting.description), location) messages.add_message(request, messages.INFO, update_msg ) return HttpResponseRedirect(request.path) else: # Leave the form populated with current setting values form = editor() return render_to_response(template, { 'title': title, 'form': form, }, context_instance=RequestContext(request))
def test_settings(self): "Make sure settings groups are initialized properly" # Settings already in the database are available immediately self.assertEqual(Populated.settings.boolean, True) self.assertEqual(Populated.settings.integer, 42) self.assertEqual(Populated.settings.string, 'Ni!') # Module settings are kept separate from model settings self.assertEqual(module_settings.boolean, False) self.assertEqual(module_settings.integer, 14) self.assertEqual(module_settings.string, 'Module') # Settings can be added together self.assertEqual(Combined.settings.boolean, False) self.assertEqual(Combined.settings.integer, 1138) self.assertEqual(Combined.settings.string, 'THX') self.assertEqual(Combined.settings.enabled, True) # Settings not in the database use empty defaults self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, None) self.assertEqual(Unpopulated.settings.string, '') # Settings should be retrieved in the order of definition self.assertEqual(Populated.settings.keys(), ['boolean', 'integer', 'string']) self.assertEqual(Combined.settings.keys(), ['boolean', 'integer', 'string', 'enabled']) # Values should be coerced to the proper Python types self.assert_(isinstance(Populated.settings.boolean, bool)) self.assert_(isinstance(Populated.settings.integer, int)) self.assert_(isinstance(Populated.settings.string, basestring)) # Settings can not be accessed directly from models, only instances self.assertRaises(AttributeError, lambda: Populated().settings) self.assertRaises(AttributeError, lambda: Unpopulated().settings) # Updates are reflected in the live settings loading.set_setting_value('dbsettings.tests', 'Unpopulated', 'boolean', True) loading.set_setting_value('dbsettings.tests', 'Unpopulated', 'integer', 13) loading.set_setting_value('dbsettings.tests', 'Unpopulated', 'string', 'Friday') self.assertEqual(Unpopulated.settings.boolean, True) self.assertEqual(Unpopulated.settings.integer, 13) self.assertEqual(Unpopulated.settings.string, 'Friday') # But they can't be modified in-place self.assertRaises(AttributeError, curry(setattr, Unpopulated.settings, 'integer', 10))
def test_settings(self): "Make sure settings groups are initialized properly" # Settings already in the database are available immediately self.assertEqual(Populated.settings.boolean, True) self.assertEqual(Populated.settings.integer, 42) self.assertEqual(Populated.settings.string, 'Ni!') # Module settings are kept separate from model settings self.assertEqual(module_settings.boolean, False) self.assertEqual(module_settings.integer, 14) self.assertEqual(module_settings.string, 'Module') # Settings can be added together self.assertEqual(Combined.settings.boolean, False) self.assertEqual(Combined.settings.integer, 1138) self.assertEqual(Combined.settings.string, 'THX') self.assertEqual(Combined.settings.enabled, True) # Settings not in the database use empty defaults self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, None) self.assertEqual(Unpopulated.settings.string, '') # Settings should be retrieved in the order of definition self.assertEqual(Populated.settings.keys(), ['boolean', 'integer', 'string']) self.assertEqual(Combined.settings.keys(), ['boolean', 'integer', 'string', 'enabled']) # Values should be coerced to the proper Python types self.assert_(isinstance(Populated.settings.boolean, bool)) self.assert_(isinstance(Populated.settings.integer, int)) self.assert_(isinstance(Populated.settings.string, basestring)) # Settings can not be accessed directly from models, only instances self.assertRaises(AttributeError, lambda: Populated().settings) self.assertRaises(AttributeError, lambda: Unpopulated().settings) # Updates are reflected in the live settings loading.set_setting_value('dbsettings.tests', 'Unpopulated', 'boolean', True) loading.set_setting_value('dbsettings.tests', 'Unpopulated', 'integer', 13) loading.set_setting_value('dbsettings.tests', 'Unpopulated', 'string', 'Friday') self.assertEqual(Unpopulated.settings.boolean, True) self.assertEqual(Unpopulated.settings.integer, 13) self.assertEqual(Unpopulated.settings.string, 'Friday') # And they can be modified in-place Unpopulated.settings.boolean = False Unpopulated.settings.integer = 42 Unpopulated.settings.string = 'Caturday' self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, 42) self.assertEqual(Unpopulated.settings.string, 'Caturday')
def test_settings(self): "Make sure settings groups are initialized properly" # Settings already in the database are available immediately self.assertEqual(Populated.settings.boolean, True) self.assertEqual(Populated.settings.integer, 42) self.assertEqual(Populated.settings.string, 'Ni!') self.assertEqual(Populated.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(Populated.settings.list_comma, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) # Module settings are kept separate from model settings self.assertEqual(module_settings.boolean, False) self.assertEqual(module_settings.integer, 14) self.assertEqual(module_settings.string, 'Module') self.assertEqual(module_settings.list_semi_colon, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(module_settings.list_comma, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) # Settings can be added together self.assertEqual(Combined.settings.boolean, False) self.assertEqual(Combined.settings.integer, 1138) self.assertEqual(Combined.settings.string, 'THX') self.assertEqual(Combined.settings.enabled, True) self.assertEqual(Combined.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(Combined.settings.list_comma, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) # Settings not in the database use empty defaults self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, None) self.assertEqual(Unpopulated.settings.string, '') self.assertEqual(Unpopulated.settings.list_semi_colon, []) self.assertEqual(Unpopulated.settings.list_comma, []) # Settings should be retrieved in the order of definition self.assertEqual(Populated.settings.keys(), ['boolean', 'integer', 'string', 'list_semi_colon', 'list_comma']) self.assertEqual(Combined.settings.keys(), ['boolean', 'integer', 'string', 'list_semi_colon', 'list_comma', 'enabled']) # Values should be coerced to the proper Python types self.assert_(isinstance(Populated.settings.boolean, bool)) self.assert_(isinstance(Populated.settings.integer, int)) self.assert_(isinstance(Populated.settings.string, basestring)) # Settings can not be accessed directly from models, only instances self.assertRaises(AttributeError, lambda: Populated().settings) self.assertRaises(AttributeError, lambda: Unpopulated().settings) # Updates are reflected in the live settings loading.set_setting_value('dbsettings.tests.tests', 'Unpopulated', 'boolean', True) loading.set_setting_value('dbsettings.tests.tests', 'Unpopulated', 'integer', 13) loading.set_setting_value('dbsettings.tests.tests', 'Unpopulated', 'string', 'Friday') loading.set_setting_value('dbsettings.tests.tests', 'Unpopulated', 'list_semi_colon', '[email protected];[email protected]') loading.set_setting_value('dbsettings.tests.tests', 'Unpopulated', 'list_comma', '[email protected],[email protected]') self.assertEqual(Unpopulated.settings.boolean, True) self.assertEqual(Unpopulated.settings.integer, 13) self.assertEqual(Unpopulated.settings.string, 'Friday') self.assertEqual(Unpopulated.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**']) self.assertEqual(Unpopulated.settings.list_comma, ['*****@*****.**', '*****@*****.**']) # And they can be modified in-place Unpopulated.settings.boolean = False Unpopulated.settings.integer = 42 Unpopulated.settings.string = 'Caturday' # Test correct stripping while we're at it. Unpopulated.settings.list_semi_colon = '[email protected]; [email protected]' Unpopulated.settings.list_comma = '[email protected] ,[email protected]' self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, 42) self.assertEqual(Unpopulated.settings.string, 'Caturday') self.assertEqual(Unpopulated.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**']) self.assertEqual(Unpopulated.settings.list_comma, ['*****@*****.**', '*****@*****.**'])
def __set__(self, instance, value): current_value = self.__get__(instance) python_value = value if value is None else self.to_python(value) if python_value != current_value: set_setting_value(*(self.key + (value,)))
def setUp(self): # Standard test fixtures don't update the in-memory cache. # So we have to do it ourselves this time. loading.set_setting_value('dbsettings.tests.tests', 'Populated', 'boolean', True) loading.set_setting_value('dbsettings.tests.tests', 'Populated', 'integer', 42) loading.set_setting_value('dbsettings.tests.tests', 'Populated', 'string', 'Ni!') loading.set_setting_value('dbsettings.tests.tests', 'Populated', 'list_semi_colon', '[email protected];[email protected];[email protected]') loading.set_setting_value('dbsettings.tests.tests', 'Populated', 'list_comma', '[email protected],[email protected],[email protected]') loading.set_setting_value('dbsettings.tests.tests', '', 'boolean', False) loading.set_setting_value('dbsettings.tests.tests', '', 'integer', 14) loading.set_setting_value('dbsettings.tests.tests', '', 'string', 'Module') loading.set_setting_value('dbsettings.tests.tests', '', 'list_semi_colon', '[email protected];[email protected];[email protected]') loading.set_setting_value('dbsettings.tests.tests', '', 'list_comma', '[email protected],[email protected],[email protected]') loading.set_setting_value('dbsettings.tests.tests', 'Combined', 'boolean', False) loading.set_setting_value('dbsettings.tests.tests', 'Combined', 'integer', 1138) loading.set_setting_value('dbsettings.tests.tests', 'Combined', 'string', 'THX') loading.set_setting_value('dbsettings.tests.tests', 'Combined', 'list_semi_colon', '[email protected];[email protected];[email protected]') loading.set_setting_value('dbsettings.tests.tests', 'Combined', 'list_comma', '[email protected],[email protected],[email protected]') loading.set_setting_value('dbsettings.tests.tests', 'Combined', 'enabled', True)
def setUp(self): # Standard test fixtures don't update the in-memory cache. # So we have to do it ourselves this time. loading.set_setting_value('dbsettings.tests', 'Populated', 'boolean', True) loading.set_setting_value('dbsettings.tests', 'Populated', 'integer', 42) loading.set_setting_value('dbsettings.tests', 'Populated', 'string', 'Ni!') loading.set_setting_value('dbsettings.tests', '', 'boolean', False) loading.set_setting_value('dbsettings.tests', '', 'integer', 14) loading.set_setting_value('dbsettings.tests', '', 'string', 'Module') loading.set_setting_value('dbsettings.tests', 'Combined', 'boolean', False) loading.set_setting_value('dbsettings.tests', 'Combined', 'integer', 1138) loading.set_setting_value('dbsettings.tests', 'Combined', 'string', 'THX') loading.set_setting_value('dbsettings.tests', 'Combined', 'enabled', True)
def setUp(self): super(SettingsTestCase, self).setUp() # Standard test fixtures don't update the in-memory cache. # So we have to do it ourselves this time. loading.set_setting_value(MODULE_NAME, 'Populated', 'boolean', True) loading.set_setting_value(MODULE_NAME, 'Populated', 'integer', 42) loading.set_setting_value(MODULE_NAME, 'Populated', 'string', 'Ni!') loading.set_setting_value(MODULE_NAME, 'Populated', 'list_semi_colon', '[email protected];[email protected];[email protected]') loading.set_setting_value(MODULE_NAME, 'Populated', 'list_comma', '[email protected],[email protected],[email protected]') loading.set_setting_value(MODULE_NAME, 'Populated', 'date', '2012-06-28') loading.set_setting_value(MODULE_NAME, 'Populated', 'time', '16:19:17') loading.set_setting_value(MODULE_NAME, 'Populated', 'datetime', '2012-06-28 16:19:17') loading.set_setting_value(MODULE_NAME, '', 'boolean', False) loading.set_setting_value(MODULE_NAME, '', 'integer', 14) loading.set_setting_value(MODULE_NAME, '', 'string', 'Module') loading.set_setting_value(MODULE_NAME, '', 'list_semi_colon', '[email protected];[email protected];[email protected]') loading.set_setting_value(MODULE_NAME, '', 'list_comma', '[email protected],[email protected],[email protected]') loading.set_setting_value(MODULE_NAME, '', 'date', '2011-05-27') loading.set_setting_value(MODULE_NAME, '', 'time', '15:18:16') loading.set_setting_value(MODULE_NAME, '', 'datetime', '2011-05-27 15:18:16') loading.set_setting_value(MODULE_NAME, 'Combined', 'boolean', False) loading.set_setting_value(MODULE_NAME, 'Combined', 'integer', 1138) loading.set_setting_value(MODULE_NAME, 'Combined', 'string', 'THX') loading.set_setting_value(MODULE_NAME, 'Combined', 'list_semi_colon', '[email protected];[email protected];[email protected]') loading.set_setting_value(MODULE_NAME, 'Combined', 'list_comma', '[email protected],[email protected],[email protected]') loading.set_setting_value(MODULE_NAME, 'Combined', 'date', '2010-04-26') loading.set_setting_value(MODULE_NAME, 'Combined', 'time', '14:17:15') loading.set_setting_value(MODULE_NAME, 'Combined', 'datetime', '2010-04-26 14:17:15') loading.set_setting_value(MODULE_NAME, 'Combined', 'enabled', True)
def test_settings(self): "Make sure settings groups are initialized properly" # Settings already in the database are available immediately self.assertEqual(Populated.settings.boolean, True) self.assertEqual(Populated.settings.integer, 42) self.assertEqual(Populated.settings.string, 'Ni!') self.assertEqual(Populated.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(Populated.settings.list_comma, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(Populated.settings.date, datetime.date(2012, 6, 28)) self.assertEqual(Populated.settings.time, datetime.time(16, 19, 17)) self.assertEqual(Populated.settings.datetime, datetime.datetime(2012, 6, 28, 16, 19, 17)) # Module settings are kept separate from model settings self.assertEqual(module_settings.boolean, False) self.assertEqual(module_settings.integer, 14) self.assertEqual(module_settings.string, 'Module') self.assertEqual(module_settings.list_semi_colon, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(module_settings.list_comma, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(module_settings.date, datetime.date(2011, 5, 27)) self.assertEqual(module_settings.time, datetime.time(15, 18, 16)) self.assertEqual(module_settings.datetime, datetime.datetime(2011, 5, 27, 15, 18, 16)) # Settings can be added together self.assertEqual(Combined.settings.boolean, False) self.assertEqual(Combined.settings.integer, 1138) self.assertEqual(Combined.settings.string, 'THX') self.assertEqual(Combined.settings.enabled, True) self.assertEqual(Combined.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(Combined.settings.list_comma, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(Combined.settings.date, datetime.date(2010, 4, 26)) self.assertEqual(Combined.settings.time, datetime.time(14, 17, 15)) self.assertEqual(Combined.settings.datetime, datetime.datetime(2010, 4, 26, 14, 17, 15)) # Settings not in the database use empty defaults self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, None) self.assertEqual(Unpopulated.settings.string, '') self.assertEqual(Unpopulated.settings.list_semi_colon, []) self.assertEqual(Unpopulated.settings.list_comma, []) # ...Unless a default parameter was specified, then they use that self.assertEqual(Defaults.settings.boolean, True) self.assertEqual(Defaults.settings.boolean_false, False) self.assertEqual(Defaults.settings.integer, 1) self.assertEqual(Defaults.settings.string, 'default') self.assertEqual(Defaults.settings.list_semi_colon, ['one', 'two']) self.assertEqual(Defaults.settings.list_comma, ['one', 'two']) self.assertEqual(Defaults.settings.date, datetime.date(2012, 3, 14)) self.assertEqual(Defaults.settings.time, datetime.time(12, 3, 14)) self.assertEqual(Defaults.settings.datetime, datetime.datetime(2012, 3, 14, 12, 3, 14)) # Settings should be retrieved in the order of definition self.assertEqual(Populated.settings.keys(), [ 'boolean', 'integer', 'string', 'list_semi_colon', 'list_comma', 'date', 'time', 'datetime' ]) self.assertEqual(Combined.settings.keys(), [ 'boolean', 'integer', 'string', 'list_semi_colon', 'list_comma', 'date', 'time', 'datetime', 'enabled' ]) # Values should be coerced to the proper Python types self.assertTrue(isinstance(Populated.settings.boolean, bool)) self.assertTrue(isinstance(Populated.settings.integer, int)) self.assertTrue(isinstance(Populated.settings.string, str)) # Settings can not be accessed directly from models, only instances self.assertRaises(AttributeError, lambda: Populated().settings) self.assertRaises(AttributeError, lambda: Unpopulated().settings) # Updates are reflected in the live settings loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'boolean', True) loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'integer', 13) loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'string', 'Friday') loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'list_semi_colon', '[email protected];[email protected]') loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'list_comma', '[email protected],[email protected]') # for date/time you can specify string (as above) or proper object loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'date', datetime.date(1912, 6, 23)) loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'time', datetime.time(1, 2, 3)) loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'datetime', datetime.datetime(1912, 6, 23, 1, 2, 3)) self.assertEqual(Unpopulated.settings.boolean, True) self.assertEqual(Unpopulated.settings.integer, 13) self.assertEqual(Unpopulated.settings.string, 'Friday') self.assertEqual(Unpopulated.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**']) self.assertEqual(Unpopulated.settings.list_comma, ['*****@*****.**', '*****@*****.**']) self.assertEqual(Unpopulated.settings.date, datetime.date(1912, 6, 23)) self.assertEqual(Unpopulated.settings.time, datetime.time(1, 2, 3)) self.assertEqual(Unpopulated.settings.datetime, datetime.datetime(1912, 6, 23, 1, 2, 3)) # Updating settings with defaults loading.set_setting_value(MODULE_NAME, 'Defaults', 'boolean', False) self.assertEqual(Defaults.settings.boolean, False) loading.set_setting_value(MODULE_NAME, 'Defaults', 'boolean_false', True) self.assertEqual(Defaults.settings.boolean_false, True) # Updating blankable settings self.assertEqual(Blankable.settings.string, '') loading.set_setting_value(MODULE_NAME, 'Blankable', 'string', 'Eli') self.assertEqual(Blankable.settings.string, 'Eli') loading.set_setting_value(MODULE_NAME, 'Blankable', 'string', '') self.assertEqual(Blankable.settings.string, '') # And they can be modified in-place Unpopulated.settings.boolean = False Unpopulated.settings.integer = 42 Unpopulated.settings.string = 'Caturday' Unpopulated.settings.date = datetime.date(1939, 9, 1) Unpopulated.settings.time = '03:47:00' Unpopulated.settings.datetime = datetime.datetime(1939, 9, 1, 3, 47, 0) # Test correct stripping while we're at it. Unpopulated.settings.list_semi_colon = '[email protected]; [email protected]' Unpopulated.settings.list_comma = '[email protected] ,[email protected]' self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, 42) self.assertEqual(Unpopulated.settings.string, 'Caturday') self.assertEqual(Unpopulated.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**']) self.assertEqual(Unpopulated.settings.list_comma, ['*****@*****.**', '*****@*****.**']) self.assertEqual(Unpopulated.settings.date, datetime.date(1939, 9, 1)) self.assertEqual(Unpopulated.settings.time, datetime.time(3, 47, 0)) self.assertEqual(Unpopulated.settings.datetime, datetime.datetime(1939, 9, 1, 3, 47, 0)) # Test non-required settings self.assertEqual(NonReq.non_req.integer, None) self.assertEqual(NonReq.non_req.fl, None) self.assertEqual(NonReq.non_req.string, "") loading.set_setting_value(MODULE_NAME, 'NonReq', 'integer', '2') self.assertEqual(NonReq.non_req.integer, 2) loading.set_setting_value(MODULE_NAME, 'NonReq', 'integer', '') self.assertEqual(NonReq.non_req.integer, None)
def test_settings(self): "Make sure settings groups are initialized properly" # Settings already in the database are available immediately self.assertEqual(Populated.settings.boolean, True) self.assertEqual(Populated.settings.integer, 42) self.assertEqual(Populated.settings.string, 'Ni!') self.assertEqual(Populated.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(Populated.settings.list_comma, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(Populated.settings.date, datetime.date(2012, 6, 28)) self.assertEqual(Populated.settings.time, datetime.time(16, 19, 17)) self.assertEqual(Populated.settings.datetime, datetime.datetime(2012, 6, 28, 16, 19, 17)) # Module settings are kept separate from model settings self.assertEqual(module_settings.boolean, False) self.assertEqual(module_settings.integer, 14) self.assertEqual(module_settings.string, 'Module') self.assertEqual(module_settings.list_semi_colon, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(module_settings.list_comma, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(module_settings.date, datetime.date(2011, 5, 27)) self.assertEqual(module_settings.time, datetime.time(15, 18, 16)) self.assertEqual(module_settings.datetime, datetime.datetime(2011, 5, 27, 15, 18, 16)) # Settings can be added together self.assertEqual(Combined.settings.boolean, False) self.assertEqual(Combined.settings.integer, 1138) self.assertEqual(Combined.settings.string, 'THX') self.assertEqual(Combined.settings.enabled, True) self.assertEqual(Combined.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(Combined.settings.list_comma, ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(Combined.settings.date, datetime.date(2010, 4, 26)) self.assertEqual(Combined.settings.time, datetime.time(14, 17, 15)) self.assertEqual(Combined.settings.datetime, datetime.datetime(2010, 4, 26, 14, 17, 15)) # Settings not in the database use empty defaults self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, None) self.assertEqual(Unpopulated.settings.string, '') self.assertEqual(Unpopulated.settings.list_semi_colon, []) self.assertEqual(Unpopulated.settings.list_comma, []) # ...Unless a default parameter was specified, then they use that self.assertEqual(Defaults.settings.boolean, True) self.assertEqual(Defaults.settings.boolean_false, False) self.assertEqual(Defaults.settings.integer, 1) self.assertEqual(Defaults.settings.string, 'default') self.assertEqual(Defaults.settings.list_semi_colon, ['one', 'two']) self.assertEqual(Defaults.settings.list_comma, ['one', 'two']) self.assertEqual(Defaults.settings.date, datetime.date(2012, 3, 14)) self.assertEqual(Defaults.settings.time, datetime.time(12, 3, 14)) self.assertEqual(Defaults.settings.datetime, datetime.datetime(2012, 3, 14, 12, 3, 14)) # Settings should be retrieved in the order of definition self.assertEqual(Populated.settings.keys(), ['boolean', 'integer', 'string', 'list_semi_colon', 'list_comma', 'date', 'time', 'datetime']) self.assertEqual(Combined.settings.keys(), ['boolean', 'integer', 'string', 'list_semi_colon', 'list_comma', 'date', 'time', 'datetime', 'enabled']) # Values should be coerced to the proper Python types self.assertTrue(isinstance(Populated.settings.boolean, bool)) self.assertTrue(isinstance(Populated.settings.integer, int)) self.assertTrue(isinstance(Populated.settings.string, six.string_types)) # Settings can not be accessed directly from models, only instances self.assertRaises(AttributeError, lambda: Populated().settings) self.assertRaises(AttributeError, lambda: Unpopulated().settings) # Updates are reflected in the live settings loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'boolean', True) loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'integer', 13) loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'string', 'Friday') loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'list_semi_colon', '[email protected];[email protected]') loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'list_comma', '[email protected],[email protected]') # for date/time you can specify string (as above) or proper object loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'date', datetime.date(1912, 6, 23)) loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'time', datetime.time(1, 2, 3)) loading.set_setting_value(MODULE_NAME, 'Unpopulated', 'datetime', datetime.datetime(1912, 6, 23, 1, 2, 3)) self.assertEqual(Unpopulated.settings.boolean, True) self.assertEqual(Unpopulated.settings.integer, 13) self.assertEqual(Unpopulated.settings.string, 'Friday') self.assertEqual(Unpopulated.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**']) self.assertEqual(Unpopulated.settings.list_comma, ['*****@*****.**', '*****@*****.**']) self.assertEqual(Unpopulated.settings.date, datetime.date(1912, 6, 23)) self.assertEqual(Unpopulated.settings.time, datetime.time(1, 2, 3)) self.assertEqual(Unpopulated.settings.datetime, datetime.datetime(1912, 6, 23, 1, 2, 3)) # Updating settings with defaults loading.set_setting_value(MODULE_NAME, 'Defaults', 'boolean', False) self.assertEqual(Defaults.settings.boolean, False) loading.set_setting_value(MODULE_NAME, 'Defaults', 'boolean_false', True) self.assertEqual(Defaults.settings.boolean_false, True) # Updating blankable settings self.assertEqual(Blankable.settings.string, '') loading.set_setting_value(MODULE_NAME, 'Blankable', 'string', 'Eli') self.assertEqual(Blankable.settings.string, 'Eli') loading.set_setting_value(MODULE_NAME, 'Blankable', 'string', '') self.assertEqual(Blankable.settings.string, '') # And they can be modified in-place Unpopulated.settings.boolean = False Unpopulated.settings.integer = 42 Unpopulated.settings.string = 'Caturday' Unpopulated.settings.date = datetime.date(1939, 9, 1) Unpopulated.settings.time = '03:47:00' Unpopulated.settings.datetime = datetime.datetime(1939, 9, 1, 3, 47, 0) # Test correct stripping while we're at it. Unpopulated.settings.list_semi_colon = '[email protected]; [email protected]' Unpopulated.settings.list_comma = '[email protected] ,[email protected]' self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, 42) self.assertEqual(Unpopulated.settings.string, 'Caturday') self.assertEqual(Unpopulated.settings.list_semi_colon, ['*****@*****.**', '*****@*****.**']) self.assertEqual(Unpopulated.settings.list_comma, ['*****@*****.**', '*****@*****.**']) self.assertEqual(Unpopulated.settings.date, datetime.date(1939, 9, 1)) self.assertEqual(Unpopulated.settings.time, datetime.time(3, 47, 0)) self.assertEqual(Unpopulated.settings.datetime, datetime.datetime(1939, 9, 1, 3, 47, 0))
def __set__(self, instance, value): current_value = self.__get__(instance) if self.to_python(value) != current_value: set_setting_value(*(self.key + (value,)))
def __set__(self, instance, value): current_value = self.__get__(instance) if self.to_python(value) != current_value: set_setting_value(*(self.key + (value, )))
def test_settings(self): "Make sure settings groups are initialized properly" # Settings already in the database are available immediately self.assertEqual(Populated.settings.boolean, True) self.assertEqual(Populated.settings.integer, 42) self.assertEqual(Populated.settings.string, "Ni!") self.assertEqual(Populated.settings.list_semi_colon, ["*****@*****.**", "*****@*****.**", "*****@*****.**"]) self.assertEqual(Populated.settings.list_comma, ["*****@*****.**", "*****@*****.**", "*****@*****.**"]) self.assertEqual(Populated.settings.date, datetime.date(2012, 6, 28)) self.assertEqual(Populated.settings.time, datetime.time(16, 19, 17)) self.assertEqual(Populated.settings.datetime, datetime.datetime(2012, 6, 28, 16, 19, 17)) # Module settings are kept separate from model settings self.assertEqual(module_settings.boolean, False) self.assertEqual(module_settings.integer, 14) self.assertEqual(module_settings.string, "Module") self.assertEqual(module_settings.list_semi_colon, ["*****@*****.**", "*****@*****.**", "*****@*****.**"]) self.assertEqual(module_settings.list_comma, ["*****@*****.**", "*****@*****.**", "*****@*****.**"]) self.assertEqual(module_settings.date, datetime.date(2011, 5, 27)) self.assertEqual(module_settings.time, datetime.time(15, 18, 16)) self.assertEqual(module_settings.datetime, datetime.datetime(2011, 5, 27, 15, 18, 16)) # Settings can be added together self.assertEqual(Combined.settings.boolean, False) self.assertEqual(Combined.settings.integer, 1138) self.assertEqual(Combined.settings.string, "THX") self.assertEqual(Combined.settings.enabled, True) self.assertEqual(Combined.settings.list_semi_colon, ["*****@*****.**", "*****@*****.**", "*****@*****.**"]) self.assertEqual(Combined.settings.list_comma, ["*****@*****.**", "*****@*****.**", "*****@*****.**"]) self.assertEqual(Combined.settings.date, datetime.date(2010, 4, 26)) self.assertEqual(Combined.settings.time, datetime.time(14, 17, 15)) self.assertEqual(Combined.settings.datetime, datetime.datetime(2010, 4, 26, 14, 17, 15)) # Settings not in the database use empty defaults self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, None) self.assertEqual(Unpopulated.settings.string, "") self.assertEqual(Unpopulated.settings.list_semi_colon, []) self.assertEqual(Unpopulated.settings.list_comma, []) # ...Unless a default paramter was specified, then they use that self.assertEqual(Defaults.settings.boolean, True) self.assertEqual(Defaults.settings.boolean_false, False) self.assertEqual(Defaults.settings.integer, 1) self.assertEqual(Defaults.settings.string, "default") self.assertEqual(Defaults.settings.list_semi_colon, ["one", "two"]) self.assertEqual(Defaults.settings.list_comma, ["one", "two"]) self.assertEqual(Defaults.settings.date, datetime.date(2012, 3, 14)) self.assertEqual(Defaults.settings.time, datetime.time(12, 3, 14)) self.assertEqual(Defaults.settings.datetime, datetime.datetime(2012, 3, 14, 12, 3, 14)) # Settings should be retrieved in the order of definition self.assertEqual( Populated.settings.keys(), ["boolean", "integer", "string", "list_semi_colon", "list_comma", "date", "time", "datetime"], ) self.assertEqual( Combined.settings.keys(), ["boolean", "integer", "string", "list_semi_colon", "list_comma", "date", "time", "datetime", "enabled"], ) # Values should be coerced to the proper Python types self.assertTrue(isinstance(Populated.settings.boolean, bool)) self.assertTrue(isinstance(Populated.settings.integer, int)) self.assertTrue(isinstance(Populated.settings.string, six.string_types)) # Settings can not be accessed directly from models, only instances self.assertRaises(AttributeError, lambda: Populated().settings) self.assertRaises(AttributeError, lambda: Unpopulated().settings) # Updates are reflected in the live settings loading.set_setting_value("dbsettings.tests", "Unpopulated", "boolean", True) loading.set_setting_value("dbsettings.tests", "Unpopulated", "integer", 13) loading.set_setting_value("dbsettings.tests", "Unpopulated", "string", "Friday") loading.set_setting_value("dbsettings.tests", "Unpopulated", "list_semi_colon", "[email protected];[email protected]") loading.set_setting_value("dbsettings.tests", "Unpopulated", "list_comma", "[email protected],[email protected]") # for date/time you can specify string (as above) or proper object loading.set_setting_value("dbsettings.tests", "Unpopulated", "date", datetime.date(1912, 6, 23)) loading.set_setting_value("dbsettings.tests", "Unpopulated", "time", datetime.time(1, 2, 3)) loading.set_setting_value( "dbsettings.tests", "Unpopulated", "datetime", datetime.datetime(1912, 6, 23, 1, 2, 3) ) self.assertEqual(Unpopulated.settings.boolean, True) self.assertEqual(Unpopulated.settings.integer, 13) self.assertEqual(Unpopulated.settings.string, "Friday") self.assertEqual(Unpopulated.settings.list_semi_colon, ["*****@*****.**", "*****@*****.**"]) self.assertEqual(Unpopulated.settings.list_comma, ["*****@*****.**", "*****@*****.**"]) self.assertEqual(Unpopulated.settings.date, datetime.date(1912, 6, 23)) self.assertEqual(Unpopulated.settings.time, datetime.time(1, 2, 3)) self.assertEqual(Unpopulated.settings.datetime, datetime.datetime(1912, 6, 23, 1, 2, 3)) # Updating settings with defaults loading.set_setting_value("dbsettings.tests", "Defaults", "boolean", False) self.assertEqual(Defaults.settings.boolean, False) loading.set_setting_value("dbsettings.tests", "Defaults", "boolean_false", True) self.assertEqual(Defaults.settings.boolean_false, True) # Updating blankable settings self.assertEqual(Blankable.settings.string, "") loading.set_setting_value("dbsettings.tests", "Blankable", "string", "Eli") self.assertEqual(Blankable.settings.string, "Eli") loading.set_setting_value("dbsettings.tests", "Blankable", "string", "") self.assertEqual(Blankable.settings.string, "") # And they can be modified in-place Unpopulated.settings.boolean = False Unpopulated.settings.integer = 42 Unpopulated.settings.string = "Caturday" Unpopulated.settings.date = datetime.date(1939, 9, 1) Unpopulated.settings.time = "03:47:00" Unpopulated.settings.datetime = datetime.datetime(1939, 9, 1, 3, 47, 0) # Test correct stripping while we're at it. Unpopulated.settings.list_semi_colon = "[email protected]; [email protected]" Unpopulated.settings.list_comma = "[email protected] ,[email protected]" self.assertEqual(Unpopulated.settings.boolean, False) self.assertEqual(Unpopulated.settings.integer, 42) self.assertEqual(Unpopulated.settings.string, "Caturday") self.assertEqual(Unpopulated.settings.list_semi_colon, ["*****@*****.**", "*****@*****.**"]) self.assertEqual(Unpopulated.settings.list_comma, ["*****@*****.**", "*****@*****.**"]) self.assertEqual(Unpopulated.settings.date, datetime.date(1939, 9, 1)) self.assertEqual(Unpopulated.settings.time, datetime.time(3, 47, 0)) self.assertEqual(Unpopulated.settings.datetime, datetime.datetime(1939, 9, 1, 3, 47, 0))
def setUp(self): # Standard test fixtures don't update the in-memory cache. # So we have to do it ourselves this time. loading.set_setting_value("dbsettings.tests", "Populated", "boolean", True) loading.set_setting_value("dbsettings.tests", "Populated", "integer", 42) loading.set_setting_value("dbsettings.tests", "Populated", "string", "Ni!") loading.set_setting_value("dbsettings.tests", "Populated", "list_semi_colon", "[email protected];[email protected];[email protected]") loading.set_setting_value("dbsettings.tests", "Populated", "list_comma", "[email protected],[email protected],[email protected]") loading.set_setting_value("dbsettings.tests", "Populated", "date", "2012-06-28") loading.set_setting_value("dbsettings.tests", "Populated", "time", "16:19:17") loading.set_setting_value("dbsettings.tests", "Populated", "datetime", "2012-06-28 16:19:17") loading.set_setting_value("dbsettings.tests", "", "boolean", False) loading.set_setting_value("dbsettings.tests", "", "integer", 14) loading.set_setting_value("dbsettings.tests", "", "string", "Module") loading.set_setting_value("dbsettings.tests", "", "list_semi_colon", "[email protected];[email protected];[email protected]") loading.set_setting_value("dbsettings.tests", "", "list_comma", "[email protected],[email protected],[email protected]") loading.set_setting_value("dbsettings.tests", "", "date", "2011-05-27") loading.set_setting_value("dbsettings.tests", "", "time", "15:18:16") loading.set_setting_value("dbsettings.tests", "", "datetime", "2011-05-27 15:18:16") loading.set_setting_value("dbsettings.tests", "Combined", "boolean", False) loading.set_setting_value("dbsettings.tests", "Combined", "integer", 1138) loading.set_setting_value("dbsettings.tests", "Combined", "string", "THX") loading.set_setting_value("dbsettings.tests", "Combined", "list_semi_colon", "[email protected];[email protected];[email protected]") loading.set_setting_value("dbsettings.tests", "Combined", "list_comma", "[email protected],[email protected],[email protected]") loading.set_setting_value("dbsettings.tests", "Combined", "date", "2010-04-26") loading.set_setting_value("dbsettings.tests", "Combined", "time", "14:17:15") loading.set_setting_value("dbsettings.tests", "Combined", "datetime", "2010-04-26 14:17:15") loading.set_setting_value("dbsettings.tests", "Combined", "enabled", True)