[extensions-web: 54/75] Send an email when a version is submitted for review.



commit 6642025e9df8a4c3661bd10bf26e15d0a8c6cd6d
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Thu Sep 22 01:01:17 2011 -0400

    Send an email when a version is submitted for review.

 sweettooth/review/models.py |   11 ++++++++++-
 sweettooth/review/views.py  |   37 ++++++++++++++++++++++++++++++++++++-
 sweettooth/settings.py      |    2 ++
 3 files changed, 48 insertions(+), 2 deletions(-)
---
diff --git a/sweettooth/review/models.py b/sweettooth/review/models.py
index da8ed78..498f54b 100644
--- a/sweettooth/review/models.py
+++ b/sweettooth/review/models.py
@@ -1,9 +1,18 @@
 
-from django.contrib.auth.models import User
+from django.contrib.auth.models import User, Permission, Group
 from django.db import models
+from django.db.models import Q
 
 from extensions import models as extensions_models
 
+def get_all_reviewers():
+    perm = Permission.objects.get(codename="can-review-extensions")
+
+    # Dark magic to get all the users with a specific permission
+    # Thanks to <schinckel> in #django
+    groups = Group.objects.filter(permissions=perm)
+    return User.objects.filter(Q(is_superuser=True)|Q(user_permissions=perm)|Q(groups__in=groups)).distinct()
+
 class CodeReview(models.Model):
     reviewer = models.ForeignKey(User)
     date = models.DateTimeField(auto_now_add=True)
diff --git a/sweettooth/review/views.py b/sweettooth/review/views.py
index 8c6c1c5..19b6558 100644
--- a/sweettooth/review/views.py
+++ b/sweettooth/review/views.py
@@ -9,14 +9,18 @@ import pygments.util
 import pygments.lexers
 import pygments.formatters
 
+from django.conf import settings
 from django.contrib import messages
+from django.core.mail import send_mail
+from django.core.urlresolvers import reverse
+from django.dispatch import receiver
 from django.http import HttpResponse, HttpResponseForbidden, Http404
 from django.shortcuts import redirect
 from django.utils.safestring import mark_safe
 from django.views.generic import View, DetailView, ListView
 from django.views.generic.detail import SingleObjectMixin
 
-from review.models import CodeReview
+from review.models import CodeReview, get_all_reviewers
 from extensions import models
 
 class AjaxGetFilesView(SingleObjectMixin, View):
@@ -125,3 +129,34 @@ class ReviewListView(ListView):
             return HttpResponseForbidden()
 
         return super(ReviewListView, self).get(request, *args, **kwargs)
+
+
+on_submitted_subject = u"""
+GNOME Shell Extensions \N{EM DASH} New review request: "%(name)s", v%(ver)d
+""".strip()
+
+on_submitted_template = u"""
+A new extension version, "%(name)s", version %(ver)d has been submitted for review by %(creator)s.
+
+Review the extension at %(url)s
+
+\N{EM DASH}
+
+This email was sent automatically by GNOME Shell Extensions. Do not reply.
+""".strip()
+
+ receiver(models.submitted_for_review)
+def send_email_on_submitted(sender, version):
+    extension = version.extension
+
+    data = dict(ver=version.version,
+                name=extension.name,
+                creator=extension.creator,
+                url=reverse('review-version', kwargs=dict(pk=version.pk)))
+
+    reviewers = get_all_reviewers().values_list('email', flat=True)
+
+    send_mail(subject=on_submitted_subject % data,
+              message=on_submitted_template % data,
+              from_email=settings.EMAIL_SENDER,
+              recipient_list=reviewers)
diff --git a/sweettooth/settings.py b/sweettooth/settings.py
index 71ef1ed..00557d3 100644
--- a/sweettooth/settings.py
+++ b/sweettooth/settings.py
@@ -180,6 +180,8 @@ LOGGING = {
     }
 }
 
+EMAIL_SENDER = "noreply extensions gnome org"
+
 try:
     from local_settings import *
 except ImportError:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]