mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-24 00:07:02 -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))
|
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:
|
if sms_sender:
|
||||||
data['sms_sender'] = sms_sender
|
data['sms_sender'] = sms_sender
|
||||||
|
|
||||||
service_api_client.update_service_with_properties(service_id, data)
|
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'
|
enabled='on' if 'international_sms' in current_service['permissions'] else 'off'
|
||||||
)
|
)
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
switch_service_permissions(
|
force_service_permission(
|
||||||
service_id,
|
service_id,
|
||||||
'international_sms',
|
'international_sms',
|
||||||
force=False if form.enabled.data == 'off' else True,
|
on=(form.enabled.data == 'on'),
|
||||||
)
|
)
|
||||||
return redirect(
|
return redirect(
|
||||||
url_for(".service_settings", service_id=service_id)
|
url_for(".service_settings", service_id=service_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user