Example #1
0
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
Example #2
0
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
Example #3
0
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)
Example #4
0
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)
Example #5
0
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
Example #6
0
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
Example #7
0
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
Example #8
0
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,
    )
Example #9
0
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
Example #12
0
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