Source code for fireblog.settings.views

from fireblog.settings import mapping, settings_dict, validate_value
from fireblog.theme import use_template, TemplateResponseDict
from pyramid.view import view_config, view_defaults
from pyramid.httpexceptions import HTTPFound
import logging


log = logging.getLogger(__name__)


@view_defaults(route_name='settings', permission='change-settings')
[docs]class Settings: def __init__(self, request): self.request = request @view_config(decorator=use_template('settings.mako'), request_method="GET")
[docs] def settings(self): new_mapping = (e._replace( value=settings_dict[e.registry_name]) for e in mapping) new_mapping = tuple(new_mapping) save_url = self.request.route_url('settings') return TemplateResponseDict(mapping=new_mapping, save_url=save_url)
@view_config(request_method="POST")
[docs] def settings_post(self): params = self.request.params errors = [] to_set = [] for entry in mapping: value = params.get(entry.registry_name, None) valid, value, error_str = validate_value(entry, value) if not valid: errors.append(error_str) continue to_set.append((entry.registry_name, value)) if not errors: # Settings will only be changed if all settings on the page were # valid. for reg_name, value in to_set: log.info('Changing {} setting to {}'.format(reg_name, value)) settings_dict[reg_name] = value else: log.info('Invalid changes to settings attempted:') for e in errors: log.info(e) self.request.session.flash(e) return HTTPFound(location=self.request.route_url('settings'))