subscribe.views: 37 total statements, 76.7% covered

Generated: Sat 2013-04-06 17:51 SGT

Source file: /Users/martin/Repos/django-subscribe/subscribe/views.py

Stats: 23 executed, 7 missed, 7 excluded, 24 ignored

  1. """Views of the ``subscribe`` app."""
  2. from django.core.exceptions import ObjectDoesNotExist
  3. from django.contrib.auth.decorators import login_required
  4. from django.contrib.contenttypes.models import ContentType
  5. from django.http import Http404
  6. from django.utils.decorators import method_decorator
  7. from django.views.generic import FormView
  8. from .forms import SubscriptionCreateForm, SubscriptionDeleteForm
  9. class SubscriptionCreateView(FormView):
  10. """View that subscribes a ``User`` to any thing."""
  11. form_class = SubscriptionCreateForm
  12. template_name = 'subscribe/subscription_form.html'
  13. @method_decorator(login_required)
  14. def dispatch(self, request, *args, **kwargs):
  15. self.user = request.user
  16. try:
  17. self.ctype = ContentType.objects.get(pk=kwargs.get('ctype_pk'))
  18. except ContentType.DoesNotExist:
  19. return Http404
  20. try:
  21. self.content_object = self.ctype.get_object_for_this_type(
  22. pk=kwargs.get('object_pk'))
  23. except ObjectDoesNotExist:
  24. return Http404
  25. return super(SubscriptionCreateView, self).dispatch(
  26. request, *args, **kwargs)
  27. def form_valid(self, form):
  28. self.object = form.save()
  29. return super(SubscriptionCreateView, self).form_valid(form)
  30. def get_context_data(self, **kwargs):
  31. ctx = super(SubscriptionCreateView, self).get_context_data(**kwargs)
  32. ctx.update({
  33. 'content_object': self.content_object,
  34. })
  35. return ctx
  36. def get_form_kwargs(self):
  37. kwargs = super(SubscriptionCreateView, self).get_form_kwargs()
  38. kwargs.update({
  39. 'user': self.user,
  40. 'content_object': self.content_object,
  41. })
  42. return kwargs
  43. def get_success_url(self):
  44. return self.content_object.get_absolute_url()
  45. class SubscriptionDeleteView(SubscriptionCreateView):
  46. """View that un-subscribes a ``User`` from any thing."""
  47. form_class = SubscriptionDeleteForm
  48. template_name = 'subscribe/subscription_delete.html'