Adds a builder method to the notification object.

This is used to construct a notification from the sorts of data an API call provides. This is used in both the db-email / db-sms tasks and the notifications rest endpoint to construct the notification DB object.
This commit is contained in:
Martyn Inglis
2016-09-07 13:44:56 +01:00
parent 727c00af21
commit 99250b2248
2 changed files with 100 additions and 8 deletions

View File

@@ -1,6 +1,5 @@
import uuid
import datetime
from sqlalchemy.dialects.postgresql import (
UUID,
JSON
@@ -15,8 +14,8 @@ from app.encryption import (
from app.authentication.utils import get_secret
from app import (
db,
encryption
)
encryption,
DATETIME_FORMAT)
from app.history_meta import Versioned
@@ -74,7 +73,6 @@ user_to_service = db.Table(
UniqueConstraint('user_id', 'service_id', name='uix_user_to_service')
)
BRANDING_GOVUK = 'govuk'
BRANDING_ORG = 'org'
BRANDING_BOTH = 'both'
@@ -395,6 +393,7 @@ class VerifyCode(db.Model):
def check_code(self, cde):
return check_hash(cde, self._code)
NOTIFICATION_CREATED = 'created'
NOTIFICATION_SENDING = 'sending'
NOTIFICATION_DELIVERED = 'delivered'
@@ -427,7 +426,6 @@ NOTIFICATION_STATUS_TYPES_ENUM = db.Enum(*NOTIFICATION_STATUS_TYPES, name='notif
class Notification(db.Model):
__tablename__ = 'notifications'
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
@@ -482,6 +480,31 @@ class Notification(db.Model):
if personalisation:
self._personalisation = encryption.encrypt(personalisation)
@staticmethod
def from_api_request(
created_at,
notification,
notification_id,
service_id,
notification_type,
api_key_id,
key_type):
return Notification(
id=notification_id,
template_id=notification['template'],
template_version=notification['template_version'],
to=notification['to'],
service_id=service_id,
job_id=notification.get('job', None),
job_row_number=notification.get('row_number', None),
status='created',
created_at=datetime.datetime.strptime(created_at, DATETIME_FORMAT),
personalisation=notification.get('personalisation'),
notification_type=notification_type,
api_key_id=api_key_id,
key_type=key_type
)
class NotificationHistory(db.Model):
__tablename__ = 'notification_history'
@@ -522,7 +545,6 @@ INVITED_USER_STATUS_TYPES = ['pending', 'accepted', 'cancelled']
class InvitedUser(db.Model):
__tablename__ = 'invited_users'
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
@@ -598,7 +620,6 @@ class Permission(db.Model):
class TemplateStatistics(db.Model):
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
service_id = db.Column(UUID(as_uuid=True), db.ForeignKey('services.id'), index=True, unique=False, nullable=False)
service = db.relationship('Service', backref=db.backref('template_statistics', lazy='dynamic'))
@@ -615,7 +636,6 @@ class TemplateStatistics(db.Model):
class Event(db.Model):
__tablename__ = 'events'
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)