contact_form.forms: 36 total statements, 93.3% covered

Generated: Fri 2015-09-18 14:41 CEST

Source file: /home/tyrdall/projects/bitmazk-contact-form/src/contact_form/forms.py

Stats: 28 executed, 2 missed, 6 excluded, 52 ignored

  1. """Forms for bitmazk-contact-form application."""
  2. import os
  3. from django import forms
  4. from django.conf import settings
  5. from django.utils.translation import ugettext_lazy as _
  6. from django_libs.utils_email import send_email
  7. from .models import ContactFormCategory
  8. def contact_form_category_choices():
  9. return [(cat.slug, cat.name) for cat in
  10. ContactFormCategory.objects.all()]
  11. class ContactBaseForm(forms.Form):
  12. """Base class for contact forms."""
  13. from_email = settings.DEFAULT_FROM_EMAIL
  14. recipients = [x[1] for x in settings.CONTACT_FORM_RECIPIENTS]
  15. subject_template = 'contact_form/email/contact_form_subject.html'
  16. body_template = 'contact_form/email/contact_form.html'
  17. submit_button_value = _('Submit')
  18. def save(self):
  19. context = {}
  20. for info in self.cleaned_data:
  21. context.update({info: self.cleaned_data.get(info)})
  22. send_email(
  23. None,
  24. context,
  25. self.subject_template,
  26. self.body_template,
  27. self.from_email,
  28. self.recipients,
  29. priority="medium",
  30. reply_to=self.cleaned_data.get('email', ''),
  31. )
  32. # Empties the form
  33. self.data = {}
  34. class ContactForm(ContactBaseForm):
  35. """A typical contact form."""
  36. name = forms.CharField(
  37. label=_('Name'),
  38. max_length=255,
  39. required=False,
  40. )
  41. email = forms.EmailField(
  42. label=_('Email'),
  43. )
  44. message = forms.CharField(
  45. max_length=5000,
  46. widget=forms.Textarea(attrs=dict(maxlength=5000)),
  47. label=_('Message'),
  48. )
  49. def __init__(self, *args, **kwargs):
  50. super(ContactForm, self).__init__(*args, **kwargs)
  51. if getattr(settings, 'CONTACT_FORM_DISPLAY_CATEGORIES', False):
  52. self.fields['category'] = forms.ChoiceField(
  53. choices=contact_form_category_choices(),
  54. label=_('Category'),
  55. help_text=_('Please tell us the subject of your request.'),
  56. )
  57. class AntiSpamContactForm(ContactForm):
  58. """A modern contact form, which works without captchas."""
  59. url = forms.URLField(required=False)
  60. class Media:
  61. css = {
  62. 'all': (os.path.join(
  63. settings.STATIC_URL, 'contact_form/css/contact_form.css'), )
  64. }
  65. js = (
  66. os.path.join(
  67. settings.STATIC_URL, 'contact_form/js/contact_form.js', ),
  68. )
  69. def save(self):
  70. if not self.cleaned_data.get('url'):
  71. return super(AntiSpamContactForm, self).save()