From aebb690bd07460a9f61db36e46d79d502e7fc247 Mon Sep 17 00:00:00 2001 From: Sawyer Bergeron Date: Fri, 15 Dec 2017 14:35:40 -0500 Subject: 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 --- dashboard/src/notifier/__init__.py | 0 dashboard/src/notifier/admin.py | 14 +++++++++ dashboard/src/notifier/apps.py | 14 +++++++++ dashboard/src/notifier/dispatchers.py | 34 ++++++++++++++++++++ dashboard/src/notifier/migrations/0001_initial.py | 31 ++++++++++++++++++ dashboard/src/notifier/migrations/__init__.py | 0 dashboard/src/notifier/models.py | 38 +++++++++++++++++++++++ 7 files changed, 131 insertions(+) create mode 100644 dashboard/src/notifier/__init__.py create mode 100644 dashboard/src/notifier/admin.py create mode 100644 dashboard/src/notifier/apps.py create mode 100644 dashboard/src/notifier/dispatchers.py create mode 100644 dashboard/src/notifier/migrations/0001_initial.py create mode 100644 dashboard/src/notifier/migrations/__init__.py create mode 100644 dashboard/src/notifier/models.py (limited to 'dashboard/src/notifier') diff --git a/dashboard/src/notifier/__init__.py b/dashboard/src/notifier/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dashboard/src/notifier/admin.py b/dashboard/src/notifier/admin.py new file mode 100644 index 0000000..cfbe778 --- /dev/null +++ b/dashboard/src/notifier/admin.py @@ -0,0 +1,14 @@ +############################################################################## +# 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.contrib import admin + +from notifier.models import * + +admin.site.register(Notifier) diff --git a/dashboard/src/notifier/apps.py b/dashboard/src/notifier/apps.py new file mode 100644 index 0000000..da5d3b0 --- /dev/null +++ b/dashboard/src/notifier/apps.py @@ -0,0 +1,14 @@ +############################################################################## +# 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 NotifierConfig(AppConfig): + name = 'notifier' diff --git a/dashboard/src/notifier/dispatchers.py b/dashboard/src/notifier/dispatchers.py new file mode 100644 index 0000000..64be2a5 --- /dev/null +++ b/dashboard/src/notifier/dispatchers.py @@ -0,0 +1,34 @@ +############################################################################## +# 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 pre_save +from django.dispatch import receiver +from django.contrib import messages +from django.core.mail import send_mail + +class DispatchHandler(): + + @receiver(pre_save, sender='notifier.Notifier') + def dispatch(sender, instance, *args, **kwargs): + try: + msg_type = getattr(DispatchHandler, instance.message_type) + msg_type(instance) + except AttributeError: + instance.msg_sent = 'no dispatcher by given name exists: sending by email' + email(instance) + + def email(instance): + if instance.msg_sent != 'no dispatcher by given name exists: sending by email': + instance.msg_sent = 'by email' + send_mail(instance.title,instance.content + + '\n\n This message pertains to the following resource: ' + + instance.resource.name,instance.sender,[instance.user.email_addr], fail_silently=False) + + def webnotification(instance): + instance.msg_sent='by web notification' diff --git a/dashboard/src/notifier/migrations/0001_initial.py b/dashboard/src/notifier/migrations/0001_initial.py new file mode 100644 index 0000000..78d2bad --- /dev/null +++ b/dashboard/src/notifier/migrations/0001_initial.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2017-12-14 21:41 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import fernet_fields.fields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('account', '0002_userprofile_email_addr'), + ('dashboard', '0002_auto_20170505_0815'), + ] + + operations = [ + migrations.CreateModel( + name='Notifier', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('title', models.CharField(max_length=240)), + ('content', fernet_fields.fields.EncryptedTextField()), + ('sender', models.CharField(default='unknown', max_length=240)), + ('message_type', models.CharField(choices=[('email', 'Email'), ('webnotification', 'Web Notification')], default='email', max_length=240)), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='account.UserProfile')), + ], + ), + ] diff --git a/dashboard/src/notifier/migrations/__init__.py b/dashboard/src/notifier/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dashboard/src/notifier/models.py b/dashboard/src/notifier/models.py new file mode 100644 index 0000000..9ebc6fc --- /dev/null +++ b/dashboard/src/notifier/models.py @@ -0,0 +1,38 @@ +############################################################################## +# 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 +from jira import JIRA, JIRAError +from dashboard.models import Resource +from booking.models import Booking +from django.contrib.auth.models import User +from account.models import UserProfile +from django.contrib import messages +from django.db.models.signals import pre_save +from fernet_fields import EncryptedTextField + +class Notifier(models.Model): + id = models.AutoField(primary_key=True) + title = models.CharField(max_length=240) + content = EncryptedTextField() + user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True, blank=True) + sender = models.CharField(max_length=240, default='unknown') + message_type = models.CharField(max_length=240, default='email', choices=( + ('email','Email'), + ('webnotification', 'Web Notification'))) + msg_sent = '' + + import notifier.dispatchers + + def __str__(self): + return self.title + + def getEmail(self): + return self.user.email_addr + -- cgit 1.2.3-korg