diff options
author | Sawyer Bergeron <sbergeron@iol.unh.edu> | 2017-12-15 14:35:40 -0500 |
---|---|---|
committer | Sawyer Bergeron <sbergeron@iol.unh.edu> | 2018-01-02 22:29:22 +0000 |
commit | eb7cb88c62feae0b412f4ecc9a5e62c3f7bdc138 (patch) | |
tree | 18dcaf0f8e2fe6204a506ae51607c46219f4dcb6 /src/notification | |
parent | ee1caa30008635717943bfdfecc692cde052a461 (diff) |
Implement Notification Framework with Initial Email Support
JIRA: None
Notification/notifier objects are now created with title,
content, sender, associated resource, and recipient and there is
now support for emails at the very least to be sent as notifications.
Change-Id: I456cf0e901d9a1e2a1e7d187dcc03d28fca003fb
Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.edu>
Diffstat (limited to 'src/notification')
-rw-r--r-- | src/notification/__init__.py | 11 | ||||
-rw-r--r-- | src/notification/admin.py | 17 | ||||
-rw-r--r-- | src/notification/apps.py | 18 | ||||
-rw-r--r-- | src/notification/migrations/0001_initial.py | 28 | ||||
-rw-r--r-- | src/notification/migrations/__init__.py | 10 | ||||
-rw-r--r-- | src/notification/models.py | 33 | ||||
-rw-r--r-- | src/notification/signals.py | 25 | ||||
-rw-r--r-- | src/notification/tasks.py | 49 | ||||
-rw-r--r-- | src/notification/tests.py | 41 |
9 files changed, 0 insertions, 232 deletions
diff --git a/src/notification/__init__.py b/src/notification/__init__.py deleted file mode 100644 index 37dcbdd..0000000 --- a/src/notification/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -############################################################################## -# Copyright (c) 2016 Max Breitenfeldt and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - - -default_app_config = 'notification.apps.NotificationConfig'
\ No newline at end of file diff --git a/src/notification/admin.py b/src/notification/admin.py deleted file mode 100644 index bcaa1ab..0000000 --- a/src/notification/admin.py +++ /dev/null @@ -1,17 +0,0 @@ -############################################################################## -# Copyright (c) 2016 Max Breitenfeldt and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - - -from django.conf import settings -from django.contrib import admin - -from notification.models import BookingNotification - -if settings.DEBUG: - admin.site.register(BookingNotification)
\ No newline at end of file diff --git a/src/notification/apps.py b/src/notification/apps.py deleted file mode 100644 index 2de22c4..0000000 --- a/src/notification/apps.py +++ /dev/null @@ -1,18 +0,0 @@ -############################################################################## -# Copyright (c) 2016 Max Breitenfeldt and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - - -from django.apps import AppConfig - - -class NotificationConfig(AppConfig): - name = 'notification' - - def ready(self): - import notification.signals #noqa
\ No newline at end of file diff --git a/src/notification/migrations/0001_initial.py b/src/notification/migrations/0001_initial.py deleted file mode 100644 index 8b8414e..0000000 --- a/src/notification/migrations/0001_initial.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-11-03 13:33 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('booking', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='BookingNotification', - fields=[ - ('id', models.AutoField(primary_key=True, serialize=False)), - ('type', models.CharField(max_length=100)), - ('submit_time', models.DateTimeField()), - ('submitted', models.BooleanField(default=False)), - ('booking', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='booking.Booking')), - ], - ), - ] diff --git a/src/notification/migrations/__init__.py b/src/notification/migrations/__init__.py deleted file mode 100644 index b5914ce..0000000 --- a/src/notification/migrations/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -############################################################################## -# Copyright (c) 2016 Max Breitenfeldt and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - - diff --git a/src/notification/models.py b/src/notification/models.py deleted file mode 100644 index 89b3023..0000000 --- a/src/notification/models.py +++ /dev/null @@ -1,33 +0,0 @@ -############################################################################## -# Copyright (c) 2016 Max Breitenfeldt and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - - -from django.db import models - -class BookingNotification(models.Model): - id = models.AutoField(primary_key=True) - type = models.CharField(max_length=100) - booking = models.ForeignKey('booking.Booking', on_delete=models.CASCADE) - submit_time = models.DateTimeField() - submitted = models.BooleanField(default=False) - - def get_content(self): - return { - 'resource_id': self.booking.resource.id, - 'booking_id': self.booking.id, - 'user': self.booking.user.username, - 'user_id': self.booking.user.id, - } - - def save(self, *args, **kwargs): - notifications = self.booking.bookingnotification_set.filter(type=self.type).exclude( - id=self.id) - #if notifications.count() > 0: - # raise ValueError('Doubled Notification') - return super(BookingNotification, self).save(*args, **kwargs) diff --git a/src/notification/signals.py b/src/notification/signals.py deleted file mode 100644 index 936c25b..0000000 --- a/src/notification/signals.py +++ /dev/null @@ -1,25 +0,0 @@ -############################################################################## -# Copyright (c) 2016 Max Breitenfeldt and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - - -from django.db.models.signals import post_save -from django.dispatch import receiver - -from booking.models import Booking -from notification.models import BookingNotification - - -@receiver(post_save, sender=Booking) -def booking_notification_handler(sender, instance, **kwargs): - BookingNotification.objects.update_or_create( - booking=instance, type='booking_start', defaults={'submit_time': instance.start} - ) - BookingNotification.objects.update_or_create( - booking=instance, type='booking_end', defaults={'submit_time': instance.end} - )
\ No newline at end of file diff --git a/src/notification/tasks.py b/src/notification/tasks.py deleted file mode 100644 index 7f73762..0000000 --- a/src/notification/tasks.py +++ /dev/null @@ -1,49 +0,0 @@ -############################################################################## -# Copyright (c) 2016 Max Breitenfeldt and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - - -import os -import sys -from datetime import timedelta - -from celery import shared_task -from django.conf import settings -from django.utils import timezone - -from notification.models import BookingNotification - -# this adds the top level directory to the python path, this is needed so that we can access the -# notification library -sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) - -from dashboard_notification.notification import Notification, Message - - -@shared_task -def send_booking_notifications(): - with Notification(dashboard_url=settings.RABBITMQ_URL, user=settings.RABBITMQ_USER, password=settings.RABBITMQ_PASSWORD) as messaging: - now = timezone.now() - notifications = BookingNotification.objects.filter(submitted=False, - submit_time__gt=now - timedelta(minutes=1), - submit_time__lt=now + timedelta(minutes=5)) - for notification in notifications: - message = Message(type=notification.type, topic=notification.booking.resource.name, - content=notification.get_content()) - messaging.send(message) - notification.submitted = True - notification.save() - -@shared_task -def notification_debug(): - with Notification(dashboard_url=settings.RABBITMQ_URL) as messaging: - notifications = BookingNotification.objects.all() - for notification in notifications: - message = Message(type=notification.type, topic=notification.booking.resource.name, - content=notification.get_content()) - messaging.send(message) diff --git a/src/notification/tests.py b/src/notification/tests.py deleted file mode 100644 index 9df9aa6..0000000 --- a/src/notification/tests.py +++ /dev/null @@ -1,41 +0,0 @@ -############################################################################## -# Copyright (c) 2016 Max Breitenfeldt and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - - -from datetime import timedelta -from unittest import TestCase - -from django.contrib.auth.models import User -from django.utils import timezone - -from booking.models import Booking -from dashboard.models import Resource -from jenkins.models import JenkinsSlave -from notification.models import * - - -class JenkinsModelTestCase(TestCase): - def setUp(self): - self.slave = JenkinsSlave.objects.create(name='test1', url='test') - self.res1 = Resource.objects.create(name='res1', slave=self.slave, description='x', - url='x') - self.user1 = User.objects.create(username='user1') - - start = timezone.now() - end = start + timedelta(days=1) - self.booking = Booking.objects.create(start=start, end=end, purpose='test', - resource=self.res1, user=self.user1) - - def test_booking_notification(self): - BookingNotification.objects.create(type='test', booking=self.booking, - submit_time=timezone.now()) - - self.assertRaises(ValueError, BookingNotification.objects.create, type='test', - booking=self.booking, - submit_time=timezone.now()) |