validators.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from django.core.exceptions import ValidationError
  2. from django.utils.translation import ugettext_lazy as _, ungettext
  3. from misago.conf import settings
  4. from misago.core.validators import validate_sluggable
  5. def validate_post(post):
  6. post_len = len(post)
  7. if not post_len:
  8. raise ValidationError(_("You have to enter a message."))
  9. if post_len < settings.post_length_min:
  10. message = ungettext(
  11. "Posted message should be at least %(limit_value)s character long (it has %(show_value)s).",
  12. "Posted message should be at least %(limit_value)s characters long (it has %(show_value)s).",
  13. settings.post_length_min)
  14. raise ValidationError(message % {
  15. 'limit_value': settings.post_length_min,
  16. 'show_value': post_len
  17. })
  18. if settings.post_length_max and post_len > settings.post_length_max:
  19. message = ungettext(
  20. "Posted message cannot be longer than %(limit_value)s character (it has %(show_value)s).",
  21. "Posted message cannot be longer than %(limit_value)s characters (it has %(show_value)s).",
  22. settings.post_length_max)
  23. raise ValidationError(message % {
  24. 'limit_value': settings.post_length_max,
  25. 'show_value': post_len
  26. })
  27. def validate_title(title):
  28. title_len = len(title)
  29. if not title_len:
  30. raise ValidationError(_("You have to enter thread title."))
  31. if title_len < settings.thread_title_length_min:
  32. message = ungettext(
  33. "Thread title should be at least %(limit_value)s character long (it has %(show_value)s).",
  34. "Thread title should be at least %(limit_value)s characters long (it has %(show_value)s).",
  35. settings.thread_title_length_min)
  36. raise ValidationError(message % {
  37. 'limit_value': settings.thread_title_length_min,
  38. 'show_value': title_len
  39. })
  40. if title_len > settings.thread_title_length_max:
  41. message = ungettext(
  42. "Thread title cannot be longer than %(limit_value)s character (it has %(show_value)s).",
  43. "Thread title cannot be longer than %(limit_value)s characters (it has %(show_value)s).",
  44. settings.thread_title_length_max)
  45. raise ValidationError(message % {
  46. 'limit_value': settings.thread_title_length_max,
  47. 'show_value': title_len
  48. })
  49. error_not_sluggable = _("Thread title should contain alpha-numeric characters.")
  50. error_slug_too_long = _("Thread title is too long.")
  51. validate_sluggable(error_not_sluggable, error_slug_too_long)(title)
  52. return title