from app.notify_client import NotifyAdminAPIClient, _attach_current_user class NotificationApiClient(NotifyAdminAPIClient): def get_notifications_for_service( self, service_id, job_id=None, template_type=None, status=None, page=None, page_size=None, count_pages=None, limit_days=None, include_jobs=None, include_from_test_key=None, format_for_csv=None, to=None, include_one_off=None, ): params = { 'page': page, 'page_size': page_size, 'template_type': template_type, 'status': status, 'include_jobs': include_jobs, 'include_from_test_key': include_from_test_key, 'format_for_csv': format_for_csv, 'to': to, 'include_one_off': include_one_off, 'count_pages': count_pages, } params = {k: v for k, v in params.items() if v is not None} # if `to` is set it is likely PII like an email address or mobile which # we do not want in our logs, so we do a POST request instead of a GET method = self.post if to else self.get kwargs = {'data': params} if to else {'params': params} if job_id: return method( url='/service/{}/job/{}/notifications'.format(service_id, job_id), **kwargs ) else: if limit_days is not None: params['limit_days'] = limit_days return method( url='/service/{}/notifications'.format(service_id), **kwargs ) def send_notification(self, service_id, *, template_id, recipient, personalisation, sender_id): data = { 'template_id': template_id, 'to': recipient, 'personalisation': personalisation, } if sender_id: data['sender_id'] = sender_id data = _attach_current_user(data) return self.post(url='/service/{}/send-notification'.format(service_id), data=data) def get_notification(self, service_id, notification_id): return self.get(url='/service/{}/notifications/{}'.format(service_id, notification_id)) def get_api_notifications_for_service(self, service_id): ret = self.get_notifications_for_service( service_id, include_jobs=False, include_from_test_key=True, include_one_off=False, count_pages=False ) return ret def update_notification_to_cancelled(self, service_id, notification_id): return self.post( url='/service/{}/notifications/{}/cancel'.format(service_id, notification_id), data={}) def get_notification_status_by_service(self, start_date, end_date): return self.get( url='service/monthly-data-by-service', params={ 'start_date': str(start_date), 'end_date': str(end_date), } ) def get_notification_count_for_job_id(self, *, service_id, job_id): return self.get(url='/service/{}/job/{}/notification_count'.format(service_id, job_id))["count"] notification_api_client = NotificationApiClient()