diff options
author | Lars Rustand <rustand.lars@gmail.com> | 2019-08-11 20:21:20 +0200 |
---|---|---|
committer | Lars Rustand <rustand.lars@gmail.com> | 2019-09-10 21:59:57 +0200 |
commit | 86f8ca67502a7638883eff1daf7a9300d2264530 (patch) | |
tree | 35dc88d173a14fb70860b68533960f99d454ddb2 | |
parent | b1eee27fc85fcef27b1dd756a62d3e656c4f64bc (diff) | |
download | archweb-86f8ca67502a7638883eff1daf7a9300d2264530.tar.gz archweb-86f8ca67502a7638883eff1daf7a9300d2264530.zip |
Send notification once packages has enough signoffs
-rw-r--r-- | packages/views/signoff.py | 26 | ||||
-rw-r--r-- | templates/packages/approved.txt | 4 |
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 %} |