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)
Exemplo n.º 2
0
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})
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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})
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
 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
Exemplo n.º 12
0
 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
Exemplo n.º 13
0
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,
    })
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
    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)
Exemplo n.º 16
0
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))
Exemplo n.º 17
0
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))
Exemplo n.º 18
0
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)
Exemplo n.º 19
0
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))