mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-05-05 08:31:00 -04:00
Refactor permissions handling to use sets
We didn’t like the nested conditional way of doing this. So this commit refactors the way that permissions are set by: - splitting it up into multiple, clearly named methods - treating the list of permissions as `set`s, which they naturally are, because you can’t have duplicate permissions (this removes a lot of the complexity around having to test for membership before removing a permission, for example)
This commit is contained in:
@@ -224,26 +224,36 @@ def service_switch_research_mode(service_id):
|
||||
return redirect(url_for('.service_settings', service_id=service_id))
|
||||
|
||||
|
||||
def switch_service_permissions(service_id, permission, sms_sender=None, force=None):
|
||||
def switch_service_permissions(service_id, permission, sms_sender=None):
|
||||
|
||||
permissions = current_service['permissions'].copy()
|
||||
force_service_permission(
|
||||
service_id,
|
||||
permission,
|
||||
on=permission not in current_service['permissions'],
|
||||
sms_sender=sms_sender
|
||||
)
|
||||
|
||||
if force is None:
|
||||
if permission in permissions:
|
||||
permissions.remove(permission)
|
||||
else:
|
||||
permissions.append(permission)
|
||||
else:
|
||||
if force is True:
|
||||
permissions.append(permission)
|
||||
elif force is False and permission in permissions:
|
||||
permissions.remove(permission)
|
||||
|
||||
current_service['permissions'] = list(set(permissions))
|
||||
def force_service_permission(service_id, permission, on=False, sms_sender=None):
|
||||
|
||||
permissions, permission = set(current_service['permissions']), {permission}
|
||||
|
||||
update_service_permissions(
|
||||
service_id,
|
||||
permissions | permission if on else permissions - permission,
|
||||
sms_sender=sms_sender
|
||||
)
|
||||
|
||||
|
||||
def update_service_permissions(service_id, permissions, sms_sender=None):
|
||||
|
||||
current_service['permissions'] = list(permissions)
|
||||
|
||||
data = {'permissions': current_service['permissions']}
|
||||
|
||||
data = {'permissions': permissions}
|
||||
if sms_sender:
|
||||
data['sms_sender'] = sms_sender
|
||||
|
||||
service_api_client.update_service_with_properties(service_id, data)
|
||||
|
||||
|
||||
@@ -442,10 +452,10 @@ def service_set_international_sms(service_id):
|
||||
enabled='on' if 'international_sms' in current_service['permissions'] else 'off'
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
switch_service_permissions(
|
||||
force_service_permission(
|
||||
service_id,
|
||||
'international_sms',
|
||||
force=False if form.enabled.data == 'off' else True,
|
||||
on=(form.enabled.data == 'on'),
|
||||
)
|
||||
return redirect(
|
||||
url_for(".service_settings", service_id=service_id)
|
||||
|
||||
Reference in New Issue
Block a user