/bp_includes/forms.py

https://github.com/coto/beecoss · Python · 115 lines · 80 code · 29 blank · 6 comment · 0 complexity · 5111667a12f1fe30906a02282de841b2 MD5 · raw file

  1. """
  2. Created on June 10, 2012
  3. @author: peta15
  4. """
  5. from wtforms import fields
  6. from wtforms import Form
  7. from wtforms import validators
  8. from bp_includes.lib import utils
  9. from webapp2_extras.i18n import lazy_gettext as _
  10. from webapp2_extras.i18n import ngettext, gettext
  11. FIELD_MAXLENGTH = 50 # intended to stop maliciously long input
  12. class FormTranslations(object):
  13. def gettext(self, string):
  14. return gettext(string)
  15. def ngettext(self, singular, plural, n):
  16. return ngettext(singular, plural, n)
  17. class BaseForm(Form):
  18. def __init__(self, request_handler):
  19. super(BaseForm, self).__init__(request_handler.request.POST)
  20. def _get_translations(self):
  21. return FormTranslations()
  22. # ==== Mixins ====
  23. class PasswordConfirmMixin(BaseForm):
  24. password = fields.TextField(_('Password'), [validators.Required(),
  25. validators.Length(max=FIELD_MAXLENGTH, message=_(
  26. "Field cannot be longer than %(max)d characters."))])
  27. c_password = fields.TextField(_('Confirm Password'),
  28. [validators.Required(), validators.EqualTo('password', _('Passwords must match.')),
  29. validators.Length(max=FIELD_MAXLENGTH,
  30. message=_("Field cannot be longer than %(max)d characters."))])
  31. class UsernameMixin(BaseForm):
  32. username = fields.TextField(_('Username'), [validators.Required(),
  33. validators.Length(max=FIELD_MAXLENGTH, message=_(
  34. "Field cannot be longer than %(max)d characters.")),
  35. validators.regexp(utils.VALID_USERNAME_REGEXP, message=_(
  36. "Username invalid. Use only letters and numbers."))])
  37. class UsernameEmailMixin(BaseForm):
  38. username = fields.TextField(_('Username'), [validators.Required(),
  39. validators.Length(max=FIELD_MAXLENGTH, message=_(
  40. "Field cannot be longer than %(max)d characters."))])
  41. class NameMixin(BaseForm):
  42. name = fields.TextField(_('Name'), [
  43. validators.Length(max=FIELD_MAXLENGTH, message=_("Field cannot be longer than %(max)d characters.")),
  44. validators.regexp(utils.NAME_LASTNAME_REGEXP, message=_(
  45. "Name invalid. Use only letters and numbers."))])
  46. last_name = fields.TextField(_('Last Name'), [
  47. validators.Length(max=FIELD_MAXLENGTH, message=_("Field cannot be longer than %(max)d characters.")),
  48. validators.regexp(utils.NAME_LASTNAME_REGEXP, message=_(
  49. "Last Name invalid. Use only letters and numbers."))])
  50. class EmailMixin(BaseForm):
  51. email = fields.TextField(_('Email'), [validators.Required(),
  52. validators.Length(min=8, max=FIELD_MAXLENGTH, message=_(
  53. "Field must be between %(min)d and %(max)d characters long.")),
  54. validators.regexp(utils.EMAIL_REGEXP, message=_('Invalid email address.'))])
  55. # ==== Forms ====
  56. class PasswordResetCompleteForm(PasswordConfirmMixin):
  57. pass
  58. class LoginForm(UsernameEmailMixin):
  59. password = fields.TextField(_('Password'), [validators.Required(),
  60. validators.Length(max=FIELD_MAXLENGTH, message=_(
  61. "Field cannot be longer than %(max)d characters."))],
  62. id='l_password')
  63. pass
  64. class RegisterForm(PasswordConfirmMixin, UsernameMixin, NameMixin, EmailMixin):
  65. country = fields.SelectField(_('Country'), choices=[])
  66. tz = fields.SelectField(_('Timezone'), choices=[])
  67. pass
  68. class EditProfileForm(UsernameMixin, NameMixin):
  69. country = fields.SelectField(_('Country'), choices=[])
  70. tz = fields.SelectField(_('Timezone'), choices=[])
  71. pass
  72. class EditPasswordForm(PasswordConfirmMixin):
  73. current_password = fields.TextField(_('Password'), [validators.Required(),
  74. validators.Length(max=FIELD_MAXLENGTH, message=_(
  75. "Field cannot be longer than %(max)d characters."))])
  76. pass
  77. class EditEmailForm(BaseForm):
  78. new_email = fields.TextField(_('Email'), [validators.Required(),
  79. validators.Length(min=8, max=FIELD_MAXLENGTH, message=_(
  80. "Field must be between %(min)d and %(max)d characters long.")),
  81. validators.regexp(utils.EMAIL_REGEXP,
  82. message=_('Invalid email address.'))])
  83. password = fields.TextField(_('Password'), [validators.Required(),
  84. validators.Length(max=FIELD_MAXLENGTH, message=_(
  85. "Field cannot be longer than %(max)d characters."))])
  86. pass