Update service permissions to ensure state in sync

This commit is contained in:
Ken Tsang
2017-05-23 13:42:46 +01:00
parent 2f626fa6fc
commit 234312ece0
4 changed files with 84 additions and 53 deletions

View File

@@ -31,7 +31,9 @@ from app.models import (
TEMPLATE_TYPES,
JobStatistics,
SMS_TYPE,
EMAIL_TYPE
EMAIL_TYPE,
INTERNATIONAL_SMS_TYPE,
LETTER_TYPE
)
from app.service.statistics import format_monthly_template_notification_stats
from app.statsd_decorators import statsd
@@ -136,10 +138,28 @@ def dao_create_service(service, user, service_id=None, service_permissions=[SMS_
service.active = True
service.research_mode = False
for permission in service_permissions:
service_permission = ServicePermission(service_id=service.id, permission=permission)
service.permissions.append(service_permission)
def process_deprecated_service_permissions():
for permission in service_permissions:
service_permission = ServicePermission(service_id=service.id, permission=permission)
service.permissions.append(service_permission)
if permission == INTERNATIONAL_SMS_TYPE:
service.can_send_international_sms = True
if permission == LETTER_TYPE:
service.can_send_letters = True
def sync_flags(flag, notify_type):
if flag and notify_type not in service_permissions:
service_permission = ServicePermission(service_id=service.id, permission=notify_type)
service.permissions.append(service_permission)
elif flag is False and notify_type in service_permissions:
service_permission = ServicePermission(service_id=service.id, permission=notify_type)
service.permissions.remove(service_permission)
sync_flags(service.can_send_international_sms, INTERNATIONAL_SMS_TYPE)
sync_flags(service.can_send_letters, LETTER_TYPE)
process_deprecated_service_permissions()
db.session.add(service)

View File

@@ -25,7 +25,7 @@ from notifications_utils.recipients import (
from app import ma
from app import models
from app.models import ServicePermission, INTERNATIONAL_SMS_TYPE, SMS_TYPE
from app.models import ServicePermission, INTERNATIONAL_SMS_TYPE, SMS_TYPE, LETTER_TYPE
from app.dao.permissions_dao import permission_dao
from app.dao.service_permissions_dao import dao_fetch_service_permissions
from app.utils import get_template_instance
@@ -184,6 +184,7 @@ class ServiceSchema(BaseSchema):
def service_permissions(self, service):
permissions = []
str_permissions = []
perms = dao_fetch_service_permissions(service.id)
for p in perms:
@@ -192,6 +193,28 @@ class ServiceSchema(BaseSchema):
"permission": p.permission
}
permissions.append(permission)
str_permissions.append(p.permission)
def process_deprecated_permission_flags():
def sync_flags(flag, notify_type):
if flag and notify_type not in str_permissions:
permission = {
"service_id": service.id,
"permission": notify_type
}
permissions.append(permission)
elif flag is False and notify_type in str_permissions:
permission = {
"service_id": service.id,
"permission": notify_type
}
permissions.remove(permission)
sync_flags(service.can_send_international_sms, INTERNATIONAL_SMS_TYPE)
sync_flags(service.can_send_letters, LETTER_TYPE)
process_deprecated_permission_flags()
return permissions
class Meta:
@@ -232,7 +255,7 @@ class ServiceSchema(BaseSchema):
def format_permissions_for_data_model(self, in_data):
if isinstance(in_data, dict) and 'permissions' in in_data:
permissions = []
for p in in_data.get('permissions'):
for p in in_data['permissions']:
permission = models.ServicePermission(service_id=in_data["id"], permission=p)
permissions.append(permission)
in_data['permissions'] = permissions
@@ -240,7 +263,7 @@ class ServiceSchema(BaseSchema):
@post_dump
def format_permissions_as_string_array(self, in_data):
if isinstance(in_data, dict) and 'permissions' in in_data:
in_data['permissions'] = [p.get('permission') for p in in_data.get('permissions')]
in_data['permissions'] = [p.get("permission") for p in in_data['permissions']]
return in_data