Files
notifications-admin/app/notify_client/service_api_client.py
T

545 lines
19 KiB
Python
Raw Normal View History

from datetime import datetime
2017-05-22 17:02:03 +01:00
2018-04-06 13:37:49 +01:00
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
class ServiceAPIClient(NotifyAdminAPIClient):
2016-01-15 15:15:35 +00:00
@cache.delete('user-{user_id}')
2017-10-04 11:49:32 +01:00
def create_service(
self,
service_name,
organisation_type,
message_limit,
restricted,
user_id,
email_from,
):
"""
Create a service and return the json.
"""
data = {
"name": service_name,
2017-10-04 11:49:32 +01:00
"organisation_type": organisation_type,
"active": True,
2016-04-12 14:19:51 +01:00
"message_limit": message_limit,
2016-02-19 16:38:08 +00:00
"user_id": user_id,
"restricted": restricted,
"email_from": email_from,
}
2016-08-11 14:20:43 +01:00
data = _attach_current_user(data)
2016-03-13 09:37:17 +00:00
return self.post("/service", data)['data']['id']
@cache.set('service-{service_id}')
def get_service(self, service_id):
"""
Retrieve a service.
"""
return self.get('/service/{0}'.format(service_id))
def get_service_statistics(self, service_id, today_only, limit_days=None):
return self.get('/service/{0}/statistics'.format(service_id), params={
'today_only': today_only, 'limit_days': limit_days
})['data']
2016-11-09 14:33:35 +00:00
def get_services(self, params_dict=None):
"""
Retrieve a list of services.
"""
2016-11-09 14:33:35 +00:00
return self.get('/service', params=params_dict)
def get_live_services_data(self, params_dict=None):
"""
Retrieve a list of live services data with contact names and notification counts.
"""
return self.get('/service/live-services-data', params=params_dict)
2016-11-09 14:33:35 +00:00
def get_active_services(self, params_dict=None):
"""
Retrieve a list of active services.
"""
params_dict['only_active'] = True
return self.get_services(params_dict)
@cache.delete('service-{service_id}')
2016-08-11 12:32:38 +01:00
def update_service(
self,
service_id,
**kwargs
):
"""
Update a service.
"""
2016-08-11 14:20:43 +01:00
data = _attach_current_user(kwargs)
disallowed_attributes = set(data.keys()) - {
'name',
'message_limit',
'active',
'restricted',
'email_from',
'reply_to_email_address',
'research_mode',
2016-08-11 14:20:43 +01:00
'sms_sender',
'created_by',
'letter_branding',
2018-02-07 10:30:49 +00:00
'email_branding',
'letter_contact_block',
2017-10-05 13:49:43 +01:00
'permissions',
'organisation_type',
'free_sms_fragment_limit',
2017-11-06 15:08:34 +00:00
'prefix_sms',
2018-06-05 10:37:41 +01:00
'contact_link',
2019-02-15 11:03:19 +00:00
'volume_email',
'volume_sms',
'volume_letter',
'consent_to_research',
'count_as_live',
'go_live_user',
'go_live_at'
}
if disallowed_attributes:
raise TypeError('Not allowed to update service attributes: {}'.format(
", ".join(disallowed_attributes)
))
endpoint = "/service/{0}".format(service_id)
2016-03-08 10:40:07 +00:00
return self.post(endpoint, data)
2019-04-10 17:20:51 +01:00
@cache.delete('live-service-and-organisation-counts')
def update_status(self, service_id, live):
return self.update_service(
service_id,
message_limit=250000 if live else 50,
restricted=(not live),
go_live_at=str(datetime.utcnow()) if live else None
2019-04-10 17:20:51 +01:00
)
2018-04-06 13:37:49 +01:00
# This method is not cached because it calls through to one which is
2016-06-01 16:07:43 +01:00
def update_service_with_properties(self, service_id, properties):
2016-08-11 12:32:38 +01:00
return self.update_service(service_id, **properties)
2016-06-01 16:07:43 +01:00
@cache.delete('service-{service_id}')
def archive_service(self, service_id):
return self.post('/service/{}/archive'.format(service_id), data=None)
@cache.delete('service-{service_id}')
def suspend_service(self, service_id):
return self.post('/service/{}/suspend'.format(service_id), data=None)
@cache.delete('service-{service_id}')
def resume_service(self, service_id):
return self.post('/service/{}/resume'.format(service_id), data=None)
@cache.delete('service-{service_id}')
@cache.delete('user-{user_id}')
2016-03-23 10:46:31 +00:00
def remove_user_from_service(self, service_id, user_id):
"""
Remove a user from a service
"""
endpoint = '/service/{service_id}/users/{user_id}'.format(
service_id=service_id,
user_id=user_id)
2016-04-15 11:08:19 +01:00
data = _attach_current_user({})
return self.delete(endpoint, data)
2016-03-23 10:46:31 +00:00
@cache.delete('service-{service_id}-templates')
2018-11-08 15:53:33 +00:00
def create_service_template(self, name, type_, content, service_id, subject=None, process_type='normal',
parent_folder_id=None):
"""
Create a service template.
"""
data = {
"name": name,
"template_type": type_,
"content": content,
"service": service_id,
2018-11-08 15:53:33 +00:00
"process_type": process_type,
}
2016-02-22 14:14:03 +00:00
if subject:
data.update({
'subject': subject
})
2018-11-08 15:53:33 +00:00
if parent_folder_id:
data.update({
'parent_folder_id': parent_folder_id
})
2016-08-11 14:20:43 +01:00
data = _attach_current_user(data)
endpoint = "/service/{0}/template".format(service_id)
return self.post(endpoint, data)
@cache.delete('service-{service_id}-templates')
@cache.delete('template-{id_}-version-None')
@cache.delete('template-{id_}-versions')
def update_service_template(
self, id_, name, type_, content, service_id, subject=None, process_type=None
):
2016-01-20 09:46:48 +00:00
"""
Update a service template.
"""
data = {
'id': id_,
'name': name,
'template_type': type_,
'content': content,
'service': service_id
}
2016-02-22 14:14:03 +00:00
if subject:
data.update({
'subject': subject
})
if process_type:
data.update({
'process_type': process_type
2018-12-18 18:22:03 +00:00
})
2016-08-11 14:20:43 +01:00
data = _attach_current_user(data)
2016-01-20 09:46:48 +00:00
endpoint = "/service/{0}/template/{1}".format(service_id, id_)
2016-02-22 14:14:03 +00:00
return self.post(endpoint, data)
2016-01-20 09:46:48 +00:00
@cache.delete('service-{service_id}-templates')
@cache.delete('template-{id_}-version-None')
@cache.delete('template-{id_}-versions')
2017-06-26 14:41:00 +01:00
def redact_service_template(self, service_id, id_):
return self.post(
"/service/{}/template/{}".format(service_id, id_),
2017-06-27 18:03:25 +01:00
_attach_current_user(
{'redact_personalisation': True}
),
2017-06-26 14:41:00 +01:00
)
@cache.delete('service-{service_id}-templates')
@cache.delete('template-{template_id}-version-None')
@cache.delete('template-{template_id}-versions')
def update_service_template_sender(self, service_id, template_id, reply_to):
data = {
'reply_to': reply_to,
}
data = _attach_current_user(data)
return self.post(
"/service/{0}/template/{1}".format(service_id, template_id),
data
)
2019-01-29 15:43:59 +00:00
@cache.delete('service-{service_id}-templates')
@cache.delete('template-{template_id}-version-None')
@cache.delete('template-{template_id}-versions')
def update_service_template_postage(self, service_id, template_id, postage):
return self.post(
"/service/{0}/template/{1}".format(service_id, template_id),
_attach_current_user({'postage': postage})
)
@cache.set('template-{template_id}-version-{version}')
2018-04-19 10:26:17 +01:00
def get_service_template(self, service_id, template_id, version=None):
"""
Retrieve a service template.
"""
endpoint = '/service/{service_id}/template/{template_id}'.format(
service_id=service_id,
template_id=template_id)
if version:
endpoint = '{base}/version/{version}'.format(base=endpoint, version=version)
2018-04-19 10:26:17 +01:00
return self.get(endpoint)
@cache.set('template-{template_id}-versions')
2018-04-19 10:26:17 +01:00
def get_service_template_versions(self, service_id, template_id):
"""
Retrieve a list of versions for a template
"""
endpoint = '/service/{service_id}/template/{template_id}/versions'.format(
service_id=service_id,
template_id=template_id
)
2018-04-19 10:26:17 +01:00
return self.get(endpoint)
@cache.set('service-{service_id}-templates')
2018-04-19 10:26:17 +01:00
def get_service_templates(self, service_id):
"""
Retrieve all templates for service.
"""
endpoint = '/service/{service_id}/template'.format(
service_id=service_id)
2018-04-19 10:26:17 +01:00
return self.get(endpoint)
2018-04-19 10:24:35 +01:00
# This doesnt need caching because it calls through to a method which is cached
2018-02-21 14:37:27 +00:00
def count_service_templates(self, service_id, template_type=None):
return len([
template for template in
self.get_service_templates(service_id)['data']
if (
not template_type
or template['template_type'] == template_type
)
])
@cache.delete('service-{service_id}-templates')
@cache.delete('template-{template_id}-version-None')
@cache.delete('template-{template_id}-versions')
def delete_service_template(self, service_id, template_id):
"""
2016-05-23 13:59:33 +01:00
Set a service template's archived flag to True
"""
endpoint = "/service/{0}/template/{1}".format(service_id, template_id)
2016-05-23 13:59:33 +01:00
data = {
'archived': True
}
2016-08-11 14:20:43 +01:00
data = _attach_current_user(data)
2016-05-23 13:59:33 +01:00
return self.post(endpoint, data=data)
2016-03-29 22:50:40 +01:00
def is_service_name_unique(self, service_id, name, email_from):
"""
Check that the service name or email from are unique across all services.
"""
endpoint = "/service/unique"
params = {"service_id": service_id, "name": name, "email_from": email_from}
return self.get(url=endpoint, params=params)["result"]
2016-03-29 22:50:40 +01:00
# Temp access of service history data. Includes service and api key history
def get_service_history(self, service_id):
return self.get('/service/{0}/history'.format(service_id))
2017-01-30 17:27:09 +00:00
def get_monthly_notification_stats(self, service_id, year):
return self.get(url='/service/{}/notifications/monthly?year={}'.format(service_id, year))
def get_whitelist(self, service_id):
return self.get(url='/service/{}/whitelist'.format(service_id))
@cache.delete('service-{service_id}')
def update_whitelist(self, service_id, data):
return self.put(url='/service/{}/whitelist'.format(service_id), data=data)
2019-03-29 15:16:29 +00:00
def get_inbound_sms(self, service_id, user_number=''):
# POST prevents the user phone number leaking into our logs
return self.post(
2018-03-21 15:08:03 +00:00
'/service/{}/inbound-sms'.format(
2017-05-24 13:19:31 +01:00
service_id,
2018-03-21 15:08:03 +00:00
),
data={'phone_number': user_number}
2018-03-21 15:08:03 +00:00
)
2017-05-22 17:02:03 +01:00
def get_most_recent_inbound_sms(self, service_id, page=None):
return self.get(
'/service/{}/inbound-sms/most-recent'.format(
service_id,
),
params={
'page': page
}
)
2017-05-24 13:19:31 +01:00
def get_inbound_sms_by_id(self, service_id, notification_id):
return self.get(
'/service/{}/inbound-sms/{}'.format(
service_id,
notification_id,
)
)
2017-05-22 17:02:03 +01:00
def get_inbound_sms_summary(self, service_id):
return self.get(
'/service/{}/inbound-sms/summary'.format(service_id)
)
@cache.delete('service-{service_id}')
2017-06-20 13:29:20 +01:00
def create_service_inbound_api(self, service_id, url, bearer_token, user_id):
data = {
"url": url,
"bearer_token": bearer_token,
"updated_by_id": user_id
}
return self.post("/service/{}/inbound-api".format(service_id), data)
@cache.delete('service-{service_id}')
2017-06-20 13:06:46 +01:00
def update_service_inbound_api(self, service_id, url, bearer_token, user_id, inbound_api_id):
2017-06-15 16:20:07 +01:00
data = {
2017-06-20 13:06:46 +01:00
"url": url,
2017-06-15 16:20:07 +01:00
"updated_by_id": user_id
}
if bearer_token:
data['bearer_token'] = bearer_token
2017-06-20 13:29:20 +01:00
return self.post("/service/{}/inbound-api/{}".format(service_id, inbound_api_id), data)
2017-06-20 13:06:46 +01:00
def get_service_inbound_api(self, service_id, inbound_sms_api_id):
return self.get(
"/service/{}/inbound-api/{}".format(
service_id, inbound_sms_api_id
)
)['data']
2017-06-15 16:20:07 +01:00
2018-04-26 17:23:44 +01:00
@cache.delete('service-{service_id}')
def delete_service_inbound_api(self, service_id, callback_api_id):
return self.delete("/service/{}/inbound-api/{}".format(
service_id, callback_api_id
))
def get_reply_to_email_addresses(self, service_id):
return self.get(
"/service/{}/email-reply-to".format(
service_id
)
)
def get_reply_to_email_address(self, service_id, reply_to_email_id):
return self.get(
"/service/{}/email-reply-to/{}".format(
service_id,
reply_to_email_id
)
)
def verify_reply_to_email_address(self, service_id, email_address):
return self.post(
"/service/{}/email-reply-to/verify".format(service_id),
data={"email": email_address}
)
@cache.delete('service-{service_id}')
def add_reply_to_email_address(self, service_id, email_address, is_default=False):
return self.post(
"/service/{}/email-reply-to".format(service_id),
data={
"email_address": email_address,
"is_default": is_default
}
)
@cache.delete('service-{service_id}')
def update_reply_to_email_address(self, service_id, reply_to_email_id, email_address, is_default=False):
return self.post(
"/service/{}/email-reply-to/{}".format(
service_id,
reply_to_email_id,
),
data={
"email_address": email_address,
"is_default": is_default
}
)
@cache.delete('service-{service_id}')
def delete_reply_to_email_address(self, service_id, reply_to_email_id):
return self.post(
"/service/{}/email-reply-to/{}/archive".format(service_id, reply_to_email_id),
data=None
)
def get_letter_contacts(self, service_id):
2017-10-24 15:37:44 +01:00
return self.get("/service/{}/letter-contact".format(service_id))
def get_letter_contact(self, service_id, letter_contact_id):
2017-10-24 15:37:44 +01:00
return self.get("/service/{}/letter-contact/{}".format(service_id, letter_contact_id))
@cache.delete('service-{service_id}')
def add_letter_contact(self, service_id, contact_block, is_default=False):
return self.post(
"/service/{}/letter-contact".format(service_id),
data={
"contact_block": contact_block,
"is_default": is_default
}
)
@cache.delete('service-{service_id}')
def update_letter_contact(self, service_id, letter_contact_id, contact_block, is_default=False):
return self.post(
"/service/{}/letter-contact/{}".format(
service_id,
letter_contact_id,
),
data={
"contact_block": contact_block,
"is_default": is_default
}
)
2017-10-24 15:37:44 +01:00
def get_sms_senders(self, service_id):
return self.get(
"/service/{}/sms-sender".format(service_id)
)
def get_sms_sender(self, service_id, sms_sender_id):
return self.get(
"/service/{}/sms-sender/{}".format(service_id, sms_sender_id)
)
@cache.delete('service-{service_id}')
2017-10-24 15:37:44 +01:00
def add_sms_sender(self, service_id, sms_sender, is_default=False, inbound_number_id=None):
data = {
"sms_sender": sms_sender,
"is_default": is_default
}
if inbound_number_id:
data["inbound_number_id"] = inbound_number_id
return self.post("/service/{}/sms-sender".format(service_id), data=data)
@cache.delete('service-{service_id}')
def update_sms_sender(self, service_id, sms_sender_id, sms_sender, is_default=False):
2017-10-24 15:37:44 +01:00
return self.post(
"/service/{}/sms-sender/{}".format(service_id, sms_sender_id),
data={
"sms_sender": sms_sender,
"is_default": is_default
}
)
@cache.delete('service-{service_id}')
def delete_sms_sender(self, service_id, sms_sender_id):
return self.post(
"/service/{}/sms-sender/{}/archive".format(service_id, sms_sender_id),
data=None
2017-10-24 15:37:44 +01:00
)
def get_service_callback_api(self, service_id, callback_api_id):
return self.get(
"/service/{}/delivery-receipt-api/{}".format(
service_id, callback_api_id
)
)['data']
@cache.delete('service-{service_id}')
def update_service_callback_api(self, service_id, url, bearer_token, user_id, callback_api_id):
data = {
"url": url,
"updated_by_id": user_id
}
if bearer_token:
data['bearer_token'] = bearer_token
return self.post("/service/{}/delivery-receipt-api/{}".format(service_id, callback_api_id), data)
2018-04-26 17:23:44 +01:00
@cache.delete('service-{service_id}')
def delete_service_callback_api(self, service_id, callback_api_id):
return self.delete("/service/{}/delivery-receipt-api/{}".format(
service_id, callback_api_id
))
@cache.delete('service-{service_id}')
def create_service_callback_api(self, service_id, url, bearer_token, user_id):
data = {
"url": url,
"bearer_token": bearer_token,
"updated_by_id": user_id
}
return self.post("/service/{}/delivery-receipt-api".format(service_id), data)
2018-12-03 17:19:38 +00:00
@cache.delete('service-{service_id}-data-retention')
def create_service_data_retention(self, service_id, notification_type, days_of_retention):
data = {
"notification_type": notification_type,
"days_of_retention": days_of_retention
}
return self.post("/service/{}/data-retention".format(service_id), data)
2018-12-03 17:19:38 +00:00
@cache.delete('service-{service_id}-data-retention')
def update_service_data_retention(self, service_id, data_retention_id, days_of_retention):
data = {
"days_of_retention": days_of_retention
}
return self.post("/service/{}/data-retention/{}".format(service_id, data_retention_id), data)
2018-12-03 17:19:38 +00:00
@cache.set('service-{service_id}-data-retention')
def get_service_data_retention(self, service_id):
return self.get("/service/{}/data-retention".format(service_id))
2018-10-26 15:39:32 +01:00
service_api_client = ServiceAPIClient()