frequently.forms: 44 total statements, 100.0% covered

Generated: Wed 2014-12-31 10:01 CET

Source file: /home/tobi/Projects/django-frequently/src/frequently/forms.py

Stats: 37 executed, 0 missed, 7 excluded, 23 ignored

  1. """
  2. Forms for the ``django-frequently`` application.
  3. """
  4. from django import forms
  5. from django.conf import settings
  6. from django.core.mail import send_mail
  7. from django.template.defaultfilters import slugify
  8. from django.template.loader import render_to_string
  9. from django.utils.translation import ugettext_lazy as _
  10. from .models import Entry
  11. class EntryForm(forms.ModelForm):
  12. """
  13. Form to submit a new entry.
  14. """
  15. class Meta:
  16. model = Entry
  17. fields = ('question', 'submitted_by', )
  18. def __init__(self, owner=None, *args, **kwargs):
  19. self.owner = owner
  20. super(EntryForm, self).__init__(*args, **kwargs)
  21. self.fields['submitted_by'].label = _('Email')
  22. self.fields['submitted_by'].required = True
  23. if not getattr(settings, 'FREQUENTLY_REQUIRE_EMAIL', True):
  24. self.fields.pop('submitted_by')
  25. def save(self, *args, **kwargs):
  26. # Create unique slug
  27. self.instance.slug = slugify(self.cleaned_data['question'])[:100]
  28. while True:
  29. try:
  30. Entry.objects.get(slug=self.instance.slug)
  31. except Entry.DoesNotExist:
  32. break
  33. else:
  34. self.instance.slug = '{0}-1'.format(self.instance.slug)
  35. submitted_by = self.cleaned_data.get('submitted_by')
  36. if self.owner:
  37. self.instance.owner = self.owner
  38. if not getattr(settings, 'FREQUENTLY_REQUIRE_EMAIL', True):
  39. self.instance.submitted_by = self.owner.email
  40. submitted_by = self.instance.submitted_by
  41. obj = super(EntryForm, self).save(*args, **kwargs)
  42. try:
  43. settings.FREQUENTLY_RECIPIENTS
  44. ctx_dict = {
  45. 'submitted_by': submitted_by,
  46. 'question': self.cleaned_data['question'],
  47. 'instance': obj,
  48. }
  49. subject = render_to_string(
  50. 'frequently/email/new_question_subject.txt', ctx_dict)
  51. subject = ''.join(subject.splitlines())
  52. message = render_to_string(
  53. 'frequently/email/new_question_body.txt', ctx_dict)
  54. to = [item[1] for item in settings.FREQUENTLY_RECIPIENTS]
  55. send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, to)
  56. except AttributeError:
  57. pass
  58. return obj