Merge pull request #863 from alphagov/allow-partial-service-updates

Allow partial service updates from service API client
This commit is contained in:
Leo Hemsted
2016-08-12 10:07:55 +01:00
committed by GitHub
12 changed files with 111 additions and 132 deletions

View File

@@ -66,17 +66,12 @@ def service_name_change_confirm(service_id):
form = ConfirmPasswordForm(_check_password)
if form.validate_on_submit():
current_service['name'] = session['service_name_change']
current_service['email_from'] = email_safe(session['service_name_change'])
try:
service_api_client.update_service(
current_service['id'],
current_service['name'],
current_service['active'],
current_service['message_limit'],
current_service['restricted'],
current_service['users'],
current_service['email_from'])
name=session['service_name_change'],
email_from=email_safe(session['service_name_change'])
)
except HTTPError as e:
error_msg = "Duplicate service name '{}'".format(session['service_name_change'])
if e.status_code == 400 and error_msg in e.message['name']:
@@ -143,14 +138,11 @@ def service_request_to_go_live(service_id):
def service_switch_live(service_id):
service_api_client.update_service(
current_service['id'],
current_service['name'],
current_service['active'],
# TODO This limit should be set depending on the agreement signed by
# with Notify.
250000 if current_service['restricted'] else 50,
False if current_service['restricted'] else True,
current_service['users'],
current_service['email_from'])
message_limit=250000 if current_service['restricted'] else 50,
restricted=(not current_service['restricted'])
)
return redirect(url_for('.service_settings', service_id=service_id))
@@ -188,15 +180,10 @@ def service_status_change_confirm(service_id):
form = ConfirmPasswordForm(_check_password)
if form.validate_on_submit():
current_service['active'] = True
service_api_client.update_service(
current_service['id'],
current_service['name'],
current_service['active'],
current_service['message_limit'],
current_service['restricted'],
current_service['users'],
current_service['email_from'])
active=True
)
return redirect(url_for('.service_settings', service_id=service_id))
return render_template(
'views/service-settings/confirm.html',
@@ -249,13 +236,8 @@ def service_set_reply_to_email(service_id):
message = 'Reply to email set to {}'.format(form.email_address.data)
service_api_client.update_service(
current_service['id'],
current_service['name'],
current_service['active'],
current_service['message_limit'],
current_service['restricted'],
current_service['users'],
current_service['email_from'],
reply_to_email_address=form.email_address.data)
reply_to_email_address=form.email_address.data
)
flash(message, 'default_with_tick')
return redirect(url_for('.service_settings', service_id=service_id))
return render_template(
@@ -277,14 +259,8 @@ def service_set_sms_sender(service_id):
message = 'Text message sender removed'
service_api_client.update_service(
current_service['id'],
current_service['name'],
current_service['active'],
current_service['message_limit'],
current_service['restricted'],
current_service['users'],
current_service['email_from'],
current_service['reply_to_email_address'],
sms_sender=form.sms_sender.data if form.sms_sender.data else None)
sms_sender=form.sms_sender.data or None
)
flash(message, 'default_with_tick')
return redirect(url_for('.service_settings', service_id=service_id))
return render_template(

View File

@@ -2,5 +2,7 @@ from flask.ext.login import current_user
def _attach_current_user(data):
data['created_by'] = current_user.id
return data
return dict(
created_by=current_user.id,
**data
)

View File

@@ -30,7 +30,7 @@ class ApiKeyApiClient(BaseAPIClient):
'name': key_name,
'key_type': key_type
}
_attach_current_user(data)
data = _attach_current_user(data)
key = self.post(url='/service/{}/api-key'.format(service_id), data=data)
return key['data']

View File

@@ -23,7 +23,7 @@ class InviteApiClient(BaseAPIClient):
'from_user': invite_from_id,
'permissions': permissions
}
_attach_current_user(data)
data = _attach_current_user(data)
resp = self.post(url='/service/{}/invite'.format(service_id), data=data)
return InvitedUser(**resp['data'])
@@ -40,7 +40,7 @@ class InviteApiClient(BaseAPIClient):
def cancel_invited_user(self, service_id, invited_user_id):
data = {'status': 'cancelled'}
_attach_current_user(data)
data = _attach_current_user(data)
self.post(url='/service/{0}/invite/{1}'.format(service_id, invited_user_id),
data=data)

View File

@@ -32,6 +32,6 @@ class JobApiClient(BaseAPIClient):
"original_file_name": original_file_name,
"notification_count": notification_count
}
_attach_current_user(data)
data = _attach_current_user(data)
resp = self.post(url='/service/{}/job'.format(service_id), data=data)
return resp['data']

View File

@@ -29,5 +29,5 @@ class ProviderClient(BaseAPIClient):
data = {
"priority": priority
}
_attach_current_user(data)
data = _attach_current_user(data)
return self.post(url='/provider-details/{}'.format(provider_id), data=data)

View File

@@ -30,7 +30,7 @@ class ServiceAPIClient(NotificationsAPIClient):
"restricted": restricted,
"email_from": email_from
}
_attach_current_user(data)
data = _attach_current_user(data)
return self.post("/service", data)['data']['id']
def delete_service(self, service_id):
@@ -73,38 +73,35 @@ class ServiceAPIClient(NotificationsAPIClient):
"""
return self.get('/service', *params)
def update_service(self,
service_id,
service_name,
active,
message_limit,
restricted,
users,
email_from,
reply_to_email_address=None,
sms_sender=None):
def update_service(
self,
service_id,
**kwargs
):
"""
Update a service.
"""
data = {
"id": service_id,
"name": service_name,
"active": active,
"message_limit": message_limit,
"restricted": restricted,
"users": users,
"email_from": email_from,
"reply_to_email_address": reply_to_email_address,
"sms_sender": sms_sender
data = _attach_current_user(kwargs)
disallowed_attributes = set(data.keys()) - {
'name',
'message_limit',
'active',
'restricted',
'email_from',
'reply_to_email_address',
'sms_sender',
'created_by'
}
_attach_current_user(data)
if disallowed_attributes:
raise TypeError('Not allowed to update service attributes: {}'.format(
", ".join(disallowed_attributes)
))
endpoint = "/service/{0}".format(service_id)
return self.post(endpoint, data)
def update_service_with_properties(self, service_id, properties):
_attach_current_user(properties)
endpoint = "/service/{0}".format(service_id)
return self.post(endpoint, properties)
return self.update_service(service_id, **properties)
def remove_user_from_service(self, service_id, user_id):
"""
@@ -130,7 +127,7 @@ class ServiceAPIClient(NotificationsAPIClient):
data.update({
'subject': subject
})
_attach_current_user(data)
data = _attach_current_user(data)
endpoint = "/service/{0}/template".format(service_id)
return self.post(endpoint, data)
@@ -149,7 +146,7 @@ class ServiceAPIClient(NotificationsAPIClient):
data.update({
'subject': subject
})
_attach_current_user(data)
data = _attach_current_user(data)
endpoint = "/service/{0}/template/{1}".format(service_id, id_)
return self.post(endpoint, data)
@@ -190,7 +187,7 @@ class ServiceAPIClient(NotificationsAPIClient):
data = {
'archived': True
}
_attach_current_user(data)
data = _attach_current_user(data)
return self.post(endpoint, data=data)
def find_all_service_email_from(self, user_id=None):