From 86f8ca67502a7638883eff1daf7a9300d2264530 Mon Sep 17 00:00:00 2001 From: Lars Rustand Date: Sun, 11 Aug 2019 20:21:20 +0200 Subject: Send notification once packages has enough signoffs --- packages/views/signoff.py | 26 ++++++++++++++++++++++++++ templates/packages/approved.txt | 4 ++++ 2 files changed, 30 insertions(+) create mode 100644 templates/packages/approved.txt 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 ', + 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 %} -- cgit v1.2.3-55-g3dc8