diff options
Diffstat (limited to 'accounts/forms.py')
-rw-r--r-- | accounts/forms.py | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/accounts/forms.py b/accounts/forms.py index bdef0ed..bbae07f 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- -from account import SERVICES from flask import g, current_app, session, Markup from flask.ext.wtf import Form from flask.ext.login import current_user from wtforms import TextField, PasswordField, ValidationError, BooleanField,\ validators +from wtforms.form import FormMeta from functools import partial from utils import _username_re, _username_exclude_re, NotRegexp, url_for @@ -81,9 +81,26 @@ class LostPasswordForm(Form): raise ValidationError(u'Es gibt keinen Benutzer mit dieser Adresse.') +class SettingsMeta(FormMeta): + def __call__(cls, *args, **kwargs): + for service in current_app.all_services: + setattr(cls, 'password_%s' % service.id, PasswordField( + u'Passwort für %s' % service.name, [ + validators.Optional(), + validators.EqualTo( + 'password_confirm_%s' % service.id, + message=u'Passwörter stimmen nicht überein'), + ])) + setattr(cls, 'password_confirm_%s' % service.id, PasswordField( + u'Passwort für %s (Bestätigung)' % service.name)) + setattr(cls, 'delete_%s' % service.id, BooleanField( + u'Passwort für %s löschen' % service.name)) + return super(SettingsMeta, cls).__call__(*args, **kwargs) class SettingsForm(Form): + __metaclass__ = SettingsMeta + old_password = PasswordField('Altes Passwort') password = PasswordField('Neues Passwort', [validators.Optional(), validators.EqualTo('password_confirm', message=u'Passwörter stimmen nicht überein')]) @@ -105,8 +122,10 @@ class SettingsForm(Form): def get_servicepassword(self, service_id): return getattr(self, 'password_%s' % service_id) + def get_servicepasswordconfirm(self, service_id): return getattr(self, 'password_confirm_%s' % service_id) + def get_servicedelete(self, service_id): return getattr(self, 'delete_%s' % service_id) @@ -119,16 +138,3 @@ class AdminDisableAccountForm(Form): form.user = current_app.user_backend.get_by_uid(field.data) except current_app.user_backend.NoSuchUserError: raise ValidationError(u'Dieser Benutzername existiert nicht') - - -#TODO: find out how we can use app.all_services in that early state -for service in SERVICES: - setattr(SettingsForm, 'password_%s' % service.id, - PasswordField(u'Passwort für %s' % service.name, [ - validators.Optional(), - validators.EqualTo('password_confirm_%s' % service.id, message=u'Passwörter stimmen nicht überein'), - ])) - setattr(SettingsForm, 'password_confirm_%s' % service.id, - PasswordField(u'Passwort für %s (Bestätigung)' % service.name)) - setattr(SettingsForm, 'delete_%s' % service.id, - BooleanField(u'Passwort für %s löschen' % service.name)) |