def search_for_notification_by_to_field(service_id, search_term, statuses, notification_type): results = notifications_dao.dao_get_notifications_by_to_field( service_id=service_id, search_term=search_term, statuses=statuses, notification_type=notification_type ) return jsonify( notifications=notification_with_template_schema.dump(results, many=True).data ), 200
def get_notification_for_service(service_id, notification_id): notification = notifications_dao.get_notification_with_personalisation( service_id, notification_id, key_type=None, ) return jsonify( notification_with_template_schema.dump(notification).data, ), 200
def get_template_statistics_for_template_id(service_id, template_id): template = dao_get_template_by_id_and_service_id(template_id, service_id) data = None notification = dao_get_last_template_usage(template_id, template.template_type, template.service_id) if notification: data = notification_with_template_schema.dump(notification).data return jsonify(data=data)
def get_template_statistics_for_template_id(service_id, template_id): template = dao_get_template_by_id_and_service_id(template_id, service_id) if not template: message = 'No template found for id {}'.format(template_id) errors = {'template_id': [message]} raise InvalidRequest(errors, status_code=404) data = None notification = dao_get_last_template_usage(template_id, template.template_type) if notification: data = notification_with_template_schema.dump(notification).data return jsonify(data=data)
def get_all_notifications_for_service(service_id): data = notifications_filter_schema.load(request.args).data if data.get('to'): notification_type = data.get('template_type')[0] if data.get( 'template_type') else None return search_for_notification_by_to_field( service_id=service_id, search_term=data['to'], statuses=data.get('status'), notification_type=notification_type) page = data['page'] if 'page' in data else 1 page_size = data[ 'page_size'] if 'page_size' in data else current_app.config.get( 'PAGE_SIZE') limit_days = data.get('limit_days') include_jobs = data.get('include_jobs', True) include_from_test_key = data.get('include_from_test_key', False) include_one_off = data.get('include_one_off', True) count_pages = data.get('count_pages', True) pagination = notifications_dao.get_notifications_for_service( service_id, filter_dict=data, page=page, page_size=page_size, count_pages=count_pages, limit_days=limit_days, include_jobs=include_jobs, include_from_test_key=include_from_test_key, include_one_off=include_one_off) kwargs = request.args.to_dict() kwargs['service_id'] = service_id if data.get('format_for_csv'): notifications = [ notification.serialize_for_csv() for notification in pagination.items ] else: notifications = notification_with_template_schema.dump( pagination.items, many=True).data return jsonify(notifications=notifications, page_size=page_size, total=pagination.total, links=pagination_links( pagination, '.get_all_notifications_for_service', **kwargs)), 200
def search_for_notification_by_to_field(service_id, search_term, statuses, notification_type): results = notifications_dao.dao_get_notifications_by_recipient_or_reference( service_id=service_id, search_term=search_term, statuses=statuses, notification_type=notification_type, page=1, page_size=current_app.config['PAGE_SIZE'], ) return jsonify( notifications=notification_with_template_schema.dump(results.items, many=True).data, links=pagination_links( results, '.get_all_notifications_for_service', statuses=statuses, notification_type=notification_type, service_id=service_id, ), ), 200
def cancel_notification_for_service(service_id, notification_id): notification = notifications_dao.get_notification_by_id(notification_id, service_id) if not notification: raise InvalidRequest('Notification not found', status_code=404) elif notification.notification_type != LETTER_TYPE: raise InvalidRequest('Notification cannot be cancelled - only letters can be cancelled', status_code=400) elif not letter_can_be_cancelled(notification.status, notification.created_at): print_day = letter_print_day(notification.created_at) raise InvalidRequest( "It’s too late to cancel this letter. Printing started {} at 5.30pm".format(print_day), status_code=400) updated_notification = notifications_dao.update_notification_status_by_id( notification_id, NOTIFICATION_CANCELLED, ) return jsonify( notification_with_template_schema.dump(updated_notification).data ), 200
def get_all_notifications_for_service_job(service_id, job_id): data = notifications_filter_schema.load(request.args).data page = data["page"] if "page" in data else 1 page_size = data[ "page_size"] if "page_size" in data else current_app.config.get( "PAGE_SIZE") paginated_notifications = get_notifications_for_job(service_id, job_id, filter_dict=data, page=page, page_size=page_size) kwargs = request.args.to_dict() kwargs["service_id"] = service_id kwargs["job_id"] = job_id notifications = None if data.get("format_for_csv"): notifications = [ notification.serialize_for_csv() for notification in paginated_notifications.items ] else: notifications = notification_with_template_schema.dump( paginated_notifications.items, many=True).data return ( jsonify( notifications=notifications, page_size=page_size, total=paginated_notifications.total, links=pagination_links(paginated_notifications, ".get_all_notifications_for_service_job", **kwargs), ), 200, )
def get_all_notifications_for_service_job(service_id, job_id): data = notifications_filter_schema.load(request.args).data page = data['page'] if 'page' in data else 1 page_size = data['page_size'] if 'page_size' in data else current_app.config.get('PAGE_SIZE') pagination = get_notifications_for_job( service_id, job_id, filter_dict=data, page=page, page_size=page_size) kwargs = request.args.to_dict() kwargs['service_id'] = service_id kwargs['job_id'] = job_id return jsonify( notifications=notification_with_template_schema.dump(pagination.items, many=True).data, page_size=page_size, total=pagination.total, links=pagination_links( pagination, '.get_all_notifications_for_service_job', **kwargs ) ), 200
def test_notification_schema_adds_api_key_name(sample_notification_with_api_key): from app.schemas import notification_with_template_schema data = notification_with_template_schema.dump(sample_notification_with_api_key).data assert data['key_name'] == 'Test key'
def test_notification_schema_ignores_absent_api_key(sample_notification_with_job): from app.schemas import notification_with_template_schema data = notification_with_template_schema.dump(sample_notification_with_job).data assert data['key_name'] is None