frequently.forms: 45 total statements, 91.9% covered

Generated: Sun 2013-11-24 13:53 SGT

Source file: /Users/martin/Repos/django-frequently/frequently/forms.py

Stats: 34 executed, 3 missed, 8 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 . import app_settings
  11. from .models import Entry
  12. class EntryForm(forms.ModelForm):
  13. """
  14. Form to submit a new entry.
  15. """
  16. class Meta:
  17. model = Entry
  18. fields = ('question', 'submitted_by', )
  19. def __init__(self, owner=None, *args, **kwargs):
  20. self.owner = owner
  21. super(EntryForm, self).__init__(*args, **kwargs)
  22. self.fields['submitted_by'].label = _('Email')
  23. self.fields['submitted_by'].required = True
  24. if not app_settings.REQUIRE_EMAIL:
  25. self.fields.pop('submitted_by')
  26. def save(self, *args, **kwargs):
  27. # Create unique slug
  28. self.instance.slug = slugify(self.cleaned_data['question'])
  29. while True:
  30. try:
  31. Entry.objects.get(slug=self.instance.slug)
  32. except Entry.DoesNotExist:
  33. break
  34. else:
  35. self.instance.slug = '{0}-1'.format(self.instance.slug)
  36. submitted_by = self.cleaned_data.get('submitted_by')
  37. if self.owner:
  38. self.instance.owner = self.owner
  39. if not app_settings.REQUIRE_EMAIL:
  40. self.instance.submitted_by = self.owner.email
  41. submitted_by = self.instance.submitted_by
  42. obj = super(EntryForm, self).save(*args, **kwargs)
  43. try:
  44. settings.FREQUENTLY_RECIPIENTS
  45. ctx_dict = {
  46. 'submitted_by': submitted_by,
  47. 'question': self.cleaned_data['question'],
  48. 'instance': obj,
  49. }
  50. subject = render_to_string(
  51. 'frequently/email/new_question_subject.txt', ctx_dict)
  52. subject = ''.join(subject.splitlines())
  53. message = render_to_string(
  54. 'frequently/email/new_question_body.txt', ctx_dict)
  55. to = [item[1] for item in settings.FREQUENTLY_RECIPIENTS]
  56. send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, to)
  57. except AttributeError:
  58. pass
  59. return obj