summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Rustand <rustand.lars@gmail.com>2019-08-11 20:21:20 +0200
committerLars Rustand <rustand.lars@gmail.com>2019-09-10 21:59:57 +0200
commit86f8ca67502a7638883eff1daf7a9300d2264530 (patch)
tree35dc88d173a14fb70860b68533960f99d454ddb2
parentb1eee27fc85fcef27b1dd756a62d3e656c4f64bc (diff)
downloadarchweb-86f8ca67502a7638883eff1daf7a9300d2264530.tar.gz
archweb-86f8ca67502a7638883eff1daf7a9300d2264530.zip
Send notification once packages has enough signoffs
-rw-r--r--packages/views/signoff.py26
-rw-r--r--templates/packages/approved.txt4
2 files changed, 30 insertions, 0 deletions
diff --git a/packages/views/signoff.py b/packages/views/signoff.py
index db20f697..350f0851 100644
--- a/packages/views/signoff.py
+++ b/packages/views/signoff.py
@@ -4,10 +4,12 @@ from operator import attrgetter
from django import forms
from django.contrib.auth.decorators import permission_required
from django.contrib.auth.models import User
+from django.core.mail import EmailMessage
from django.core.serializers.json import DjangoJSONEncoder
from django.db import transaction
from django.http import HttpResponse, Http404
from django.shortcuts import get_list_or_404, redirect, render
+from django.template import loader
from django.utils.timezone import now
from django.views.decorators.cache import never_cache
@@ -53,6 +55,30 @@ def signoff_package(request, name, repo, arch, revoke=False):
return render(request, '403.html', status=403)
signoff, created = Signoff.objects.get_or_create_from_package(
package, request.user)
+ signoffs = Signoff.objects.for_package(package).filter(
+ revoked__isnull=True)
+
+ if signoffs.count() >= spec.required:
+ packager = package.packager
+
+ # TODO: Handle notification when packager does not exist
+ if packager:
+ toemail = [packager.email]
+ subject = f'{package.repo.name} package ' + \
+ f'[{package.pkgname} {package.full_version}] approved'
+
+ # send notification email to the maintainers
+ tmpl = loader.get_template('packages/approved.txt')
+ ctx = {
+ 'signoffs': signoffs,
+ 'pkg': package,
+ }
+ msg = EmailMessage(subject,
+ tmpl.render(ctx),
+ 'Arch Website Notification <nobody@archlinux.org>',
+ toemail,
+ )
+ msg.send(fail_silently=True)
all_signoffs = Signoff.objects.for_package(package)
diff --git a/templates/packages/approved.txt b/templates/packages/approved.txt
new file mode 100644
index 00000000..e601c0a7
--- /dev/null
+++ b/templates/packages/approved.txt
@@ -0,0 +1,4 @@
+{% autoescape off %} The {{ pkg.repo.name }} package {{ pkg.pkgname }} {{ pkg.full_version }} has received the required number of signoffs.
+
+The package was signed off by the following users:{% for s in signoffs %}
+ - {{ s.user.username }}{% endfor %}{% endautoescape %}