contact_form.forms: 45 total statements, 94.3% covered

Generated: Fri 2013-09-13 08:20 CEST

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

Stats: 33 executed, 2 missed, 10 excluded, 42 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.core.mail import send_mail
  6. from django.template import loader
  7. from django.utils.translation import ugettext_lazy as _
  8. from .models import ContactFormCategory
  9. def contact_form_category_choices():
  10. return [(cat.slug, cat.name) for cat in
  11. ContactFormCategory.objects.all()]
  12. class ContactBaseForm(forms.Form):
  13. """Base class for contact forms."""
  14. from_email = settings.DEFAULT_FROM_EMAIL
  15. recipients = [x[1] for x in settings.CONTACT_FORM_RECIPIENTS]
  16. subject_template = 'contact_form/contact_form_subject.txt'
  17. body_template = 'contact_form/contact_form.txt'
  18. submit_button_value = _('Submit')
  19. def save(self):
  20. context = {}
  21. for info in self.cleaned_data:
  22. context.update({info: self.cleaned_data.get(info)})
  23. subject = loader.render_to_string(self.subject_template, context)
  24. subject = ''.join(subject.splitlines())
  25. body = loader.render_to_string(self.body_template, context,)
  26. send_mail(subject, body, self.from_email, self.recipients,
  27. fail_silently=False)
  28. self.data = {}
  29. class ContactForm(ContactBaseForm):
  30. """A typical contact form."""
  31. name = forms.CharField(
  32. label=_('Name'),
  33. max_length=255,
  34. required=False,
  35. )
  36. email = forms.EmailField(
  37. label=_('Email'),
  38. )
  39. message = forms.CharField(
  40. max_length=5000,
  41. widget=forms.Textarea(attrs=dict(maxlength=5000)),
  42. label=_('Message'),
  43. )
  44. def __init__(self, *args, **kwargs):
  45. super(ContactForm, self).__init__(*args, **kwargs)
  46. if getattr(settings, 'ENABLE_CAPTCHA', False):
  47. # Only import captcha app, if captchas are used
  48. from captcha.fields import CaptchaField
  49. self.fields['captcha'] = CaptchaField()
  50. if getattr(settings, 'CONTACT_FORM_DISPLAY_CATEGORIES', False):
  51. # Only import captcha app, if captchas are used
  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()