def customized_editor(user, settings): "Customize the setting editor based on the current user and setting list" base_fields = OrderedDict() verbose_names = {} apps = {} for setting in settings: perm = 'dbsettings.can_edit_%s_settings' % setting.app.lower() # dbsettings.change_setting permission overrides any/all dbsettings group-specific perms if user.has_perm(perm) or user.has_perm("dbsettings.change_setting"): # Add the field to the customized field list storage = get_setting_storage(*setting.key) kwargs = { 'label': setting.description, 'help_text': setting.help_text, # Provide current setting values for initializing the form 'initial': setting.to_editor(storage.value), 'required': setting.required, 'widget': setting.widget, } if setting.choices: field = forms.ChoiceField(choices=setting.choices, **kwargs) else: field = setting.field(**kwargs) key = '%s__%s__%s' % setting.key apps[key] = setting.app base_fields[key] = field verbose_names[key] = setting.verbose_name attrs = { 'base_fields': base_fields, 'verbose_names': verbose_names, 'apps': apps } return type('SettingsEditor', (SettingsEditor, ), attrs)
def customized_editor(user, settings): "Customize the setting editor based on the current user and setting list" base_fields = SortedDict() for setting in settings: perm = '%s.can_edit_%s_settings' % ( setting.module_name.split('.')[-2], setting.class_name.lower() ) if user.has_perm(perm): # Add the field to the customized field list storage = get_setting_storage(*setting.key) kwargs = { 'label': setting.description, 'help_text': setting.help_text, # Provide current setting values for initializing the form 'initial': setting.to_editor(storage.value), 'required': setting.required, } if setting.choices: field = forms.ChoiceField(choices=setting.choices, **kwargs) else: try: field = setting.field(queryset=setting.queryset, widget=setting.widget, **kwargs) print field, setting, setting.queryset, setting.widget except: field = setting.field(**kwargs) base_fields['%s__%s__%s' % setting.key] = field return type('SettingsEditor', (SettingsEditor,), {'base_fields': base_fields})
def customized_editor(user, settings): "Customize the setting editor based on the current user and setting list" base_fields = SortedDict() verbose_names = {} for setting in settings: perm = '%s.can_edit_%s_settings' % (setting.module_name.split('.')[-2], setting.class_name.lower()) if user.has_perm(perm): # Add the field to the customized field list storage = get_setting_storage(*setting.key) kwargs = { 'label': setting.description, 'help_text': setting.help_text, # Provide current setting values for initializing the form 'initial': setting.to_editor(storage.value), 'required': setting.required, 'widget': setting.widget, } if setting.choices: field = forms.ChoiceField(choices=setting.choices, **kwargs) else: field = setting.field(**kwargs) key = '%s__%s__%s' % setting.key base_fields[key] = field verbose_names[key] = setting.verbose_name attrs = {'base_fields': base_fields, 'verbose_names': verbose_names} return type('SettingsEditor', (SettingsEditor, ), attrs)
def customized_editor(user, settings): """Customize the setting editor based on the current user and setting list""" base_fields = SortedDict() verbose_names = {} for setting in settings: if len(setting.module_name.split('.')) > 1: app_name = setting.module_name.split('.')[-2] else: app_name = setting.module_name.split('.')[-1] perm = '%s.can_edit_%s_settings' % ( app_name, setting.class_name.lower() ) # dbsettings.change_setting permission overrides any/all dbsettings group-specific perms if user.has_perm(perm) or user.has_perm("dbsettings.change_setting"): # Add the field to the customized field list storage = get_setting_storage(*setting.key) kwargs = { 'label': setting.description, 'help_text': setting.help_text, # Provide current setting values for initializing the form 'initial': setting.to_editor(storage.value), 'required': setting.required, 'widget': setting.widget, } if setting.choices: field = forms.ChoiceField(choices=setting.choices, **kwargs) else: field = setting.field(**kwargs) key = '%s__%s__%s' % setting.key base_fields[key] = field verbose_names[key] = setting.verbose_name attrs = {'base_fields': base_fields, 'verbose_names': verbose_names} return type('SettingsEditor', (SettingsEditor,), attrs)
def customized_editor(user, settings): "Customize the setting editor based on the current user and setting list" base_fields = OrderedDict() verbose_names = {} apps = {} for setting in settings: perm = "%s.can_edit_%s_settings" % (setting.app, setting.class_name.lower()) if user.has_perm(perm): # Add the field to the customized field list storage = get_setting_storage(*setting.key) kwargs = { "label": setting.description, "help_text": setting.help_text, # Provide current setting values for initializing the form "initial": setting.to_editor(storage.value), "required": setting.required, "widget": setting.widget, } if setting.choices: field = forms.ChoiceField(choices=setting.choices, **kwargs) else: field = setting.field(**kwargs) key = "%s__%s__%s" % setting.key apps[key] = setting.app base_fields[key] = field verbose_names[key] = setting.verbose_name attrs = {"base_fields": base_fields, "verbose_names": verbose_names, "apps": apps} return type("SettingsEditor", (SettingsEditor,), attrs)
def set_setting_value(module_name, class_name, attribute_name, value): setting = get_setting(module_name, class_name, attribute_name) storage = get_setting_storage(module_name, class_name, attribute_name) storage.value = setting.get_db_prep_save(value) storage.save() key = _get_cache_key(module_name, class_name, attribute_name) cache.delete(key)
def customized_editor(user, settings): """Customize the setting editor based on the current user and setting list""" base_fields = SortedDict() verbose_names = {} for setting in settings: perm = "%s.can_edit_%s_settings" % (setting.module_name.split(".")[-2], setting.class_name.lower()) # dbsettings.change_setting permission overrides any/all dbsettings group-specific perms if user.has_perm(perm) or user.has_perm("dbsettings.change_setting"): # Add the field to the customized field list storage = get_setting_storage(*setting.key) kwargs = { "label": setting.description, "help_text": setting.help_text, # Provide current setting values for initializing the form "initial": setting.to_editor(storage.value), "required": setting.required, } if setting.choices: field = forms.ChoiceField(choices=setting.choices, **kwargs) else: field = setting.field(**kwargs) key = "%s__%s__%s" % setting.key base_fields[key] = field verbose_names[key] = setting.verbose_name attrs = {"base_fields": base_fields, "verbose_names": verbose_names} return type("SettingsEditor", (SettingsEditor,), attrs)
def customized_editor(user, settings): "Customize the setting editor based on the current user and setting list" import dbsettings base_fields = SortedDict() for setting in settings: perm = '%s.can_edit_%s_settings' % ( setting.module_name.split('.')[-2], setting.class_name.lower() ) if user.has_perm(perm): # Add the field to the customized field list storage = get_setting_storage(*setting.key) kwargs = { 'label': setting.description, 'help_text': setting.help_text, # Provide current setting values for initializing the form 'initial': setting.to_editor(storage.value), } if setting.choices: field = forms.ChoiceField(choices=setting.choices, **kwargs) elif isinstance(setting, dbsettings.values.TextValue): field = forms.CharField ( widget=forms.widgets.Textarea(), **kwargs ) else: field = setting.field(**kwargs) base_fields['%s__%s__%s' % setting.key] = field return type('SettingsEditor', (SettingsEditor,), {'base_fields': base_fields})
def customized_editor(user, settings): "Customize the setting editor based on the current user and setting list" base_fields = OrderedDict() verbose_names = {} apps = {} for setting in settings: perm = '%s.can_edit_%s_settings' % ( setting.app, setting.class_name.lower() ) if user.has_perm(perm): # Add the field to the customized field list storage = get_setting_storage(*setting.key) kwargs = { 'label': setting.description, 'help_text': setting.help_text, # Provide current setting values for initializing the form 'initial': setting.to_editor(storage.value), 'required': setting.required, } if setting.choices: field = forms.ChoiceField(choices=setting.choices, **kwargs) else: field = setting.field(**kwargs) key = '%s__%s__%s' % setting.key apps[key] = setting.app base_fields[key] = field verbose_names[key] = setting.verbose_name attrs = {'base_fields': base_fields, 'verbose_names': verbose_names, 'apps': apps} return type('SettingsEditor', (SettingsEditor,), attrs)
def __get__(self, instance=None, type=None): if instance == None: raise AttributeError, "%r is only accessible from %s instances." % (self.attribute_name, type.__name__) try: storage = get_setting_storage(*self.key) return self.to_python(storage.value) except: return None
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): 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, **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 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))