コード例 #1
0
def test_does_not_delete_non_temp_letter_file(mocker, fake_uuid):
    mocked_delete_s3_object = mocker.patch(
        'app.s3_client.s3_logo_client.delete_s3_object')

    with pytest.raises(ValueError) as error:
        delete_letter_temp_file(svg_filename)

    mocked_delete_s3_object.assert_not_called
    assert str(error.value) == 'Not a temp file: {}'.format(svg_filename)
コード例 #2
0
def test_delete_single_temp_letter_file(mocker, fake_uuid, upload_filename):
    mocked_delete_s3_object = mocker.patch(
        'app.s3_client.s3_logo_client.delete_s3_object')

    upload_filename = LETTER_TEMP_TAG.format(user_id=fake_uuid) + svg_filename

    delete_letter_temp_file(upload_filename)

    mocked_delete_s3_object.assert_called_with(upload_filename)
コード例 #3
0
def create_letter_branding(logo=None):
    file_upload_form = SVGFileUpload()
    letter_branding_details_form = ServiceLetterBrandingDetails()

    file_upload_form_submitted = file_upload_form.file.data
    details_form_submitted = request.form.get(
        "operation") == "branding-details"

    if file_upload_form_submitted and file_upload_form.validate_on_submit():
        upload_filename = upload_letter_temp_logo(
            file_upload_form.file.data.filename,
            file_upload_form.file.data,
            current_app.config["AWS_REGION"],
            user_id=session["user_id"],
        )

        if logo and logo.startswith(
                LETTER_TEMP_TAG.format(user_id=session["user_id"])):
            delete_letter_temp_file(logo)

        return redirect(
            url_for(".create_letter_branding", logo=upload_filename))

    if details_form_submitted and letter_branding_details_form.validate_on_submit(
    ):
        if logo:
            db_filename = letter_filename_for_db(logo, session["user_id"])
            png_file = get_png_file_from_svg(logo)

            try:
                letter_branding_client.create_letter_branding(
                    filename=db_filename,
                    name=letter_branding_details_form.name.data,
                )

                upload_letter_logos(logo, db_filename, png_file,
                                    session["user_id"])

                return redirect(url_for("main.letter_branding"))

            except HTTPError as e:
                if "name" in e.message:
                    letter_branding_details_form.name.errors.append(
                        e.message["name"][0])
                else:
                    raise e
        else:
            # Show error on upload form if trying to submit with no logo
            file_upload_form.validate()

    return render_template(
        "views/letter-branding/manage-letter-branding.html",
        file_upload_form=file_upload_form,
        letter_branding_details_form=letter_branding_details_form,
        cdn_url=get_logo_cdn_domain(),
        logo=logo,
    )
コード例 #4
0
def update_letter_branding(branding_id, logo=None):
    letter_branding = letter_branding_client.get_letter_branding(branding_id)

    file_upload_form = SVGFileUpload()
    letter_branding_details_form = ServiceLetterBrandingDetails(
        name=letter_branding['name'], )

    file_upload_form_submitted = file_upload_form.file.data
    details_form_submitted = request.form.get(
        'operation') == 'branding-details'

    logo = logo if logo else permanent_letter_logo_name(
        letter_branding['filename'], 'svg')

    if file_upload_form_submitted and file_upload_form.validate_on_submit():
        upload_filename = upload_letter_temp_logo(
            file_upload_form.file.data.filename,
            file_upload_form.file.data,
            current_app.config['AWS_REGION'],
            user_id=session["user_id"])

        if logo.startswith(LETTER_TEMP_TAG.format(user_id=session['user_id'])):
            delete_letter_temp_file(logo)

        return redirect(
            url_for('.update_letter_branding',
                    branding_id=branding_id,
                    logo=upload_filename))

    if details_form_submitted and letter_branding_details_form.validate_on_submit(
    ):
        db_filename = letter_filename_for_db(logo, session['user_id'])

        try:
            if db_filename == letter_branding['filename']:

                letter_branding_client.update_letter_branding(
                    branding_id=branding_id,
                    filename=db_filename,
                    name=letter_branding_details_form.name.data,
                )

                return redirect(url_for('main.letter_branding'))
            else:
                letter_branding_client.update_letter_branding(
                    branding_id=branding_id,
                    filename=db_filename,
                    name=letter_branding_details_form.name.data,
                )

                upload_letter_svg_logo(logo, db_filename, session['user_id'])

                return redirect(url_for('main.letter_branding'))

        except HTTPError as e:
            if 'name' in e.message:
                letter_branding_details_form.name.errors.append(
                    e.message['name'][0])
            else:
                raise e
        except BotoClientError:
            # we had a problem saving the file - rollback the db changes
            letter_branding_client.update_letter_branding(
                branding_id=branding_id,
                filename=letter_branding['filename'],
                name=letter_branding['name'],
            )
            file_upload_form.file.errors = [
                'Error saving uploaded file - try uploading again'
            ]

    return render_template(
        'views/letter-branding/manage-letter-branding.html',
        file_upload_form=file_upload_form,
        letter_branding_details_form=letter_branding_details_form,
        cdn_url=get_logo_cdn_domain(),
        logo=logo,
        is_update=True)
コード例 #5
0
def update_letter_branding(branding_id, logo=None):
    letter_branding = letter_branding_client.get_letter_branding(branding_id)

    file_upload_form = SVGFileUpload()
    letter_branding_details_form = ServiceLetterBrandingDetails(
        name=letter_branding["name"], )

    file_upload_form_submitted = file_upload_form.file.data
    details_form_submitted = request.form.get(
        "operation") == "branding-details"

    logo = logo if logo else permanent_letter_logo_name(
        letter_branding["filename"], "svg")

    if file_upload_form_submitted and file_upload_form.validate_on_submit():
        upload_filename = upload_letter_temp_logo(
            file_upload_form.file.data.filename,
            file_upload_form.file.data,
            current_app.config["AWS_REGION"],
            user_id=session["user_id"],
        )

        if logo.startswith(LETTER_TEMP_TAG.format(user_id=session["user_id"])):
            delete_letter_temp_file(logo)

        return redirect(
            url_for(".update_letter_branding",
                    branding_id=branding_id,
                    logo=upload_filename))

    if details_form_submitted and letter_branding_details_form.validate_on_submit(
    ):
        db_filename = letter_filename_for_db(logo, session["user_id"])

        try:
            if db_filename == letter_branding["filename"]:

                letter_branding_client.update_letter_branding(
                    branding_id=branding_id,
                    filename=db_filename,
                    name=letter_branding_details_form.name.data,
                )

                return redirect(url_for("main.letter_branding"))
            else:
                png_file = get_png_file_from_svg(logo)

                letter_branding_client.update_letter_branding(
                    branding_id=branding_id,
                    filename=db_filename,
                    name=letter_branding_details_form.name.data,
                )

                upload_letter_logos(logo, db_filename, png_file,
                                    session["user_id"])

                return redirect(url_for("main.letter_branding"))

        except HTTPError as e:
            if "name" in e.message:
                letter_branding_details_form.name.errors.append(
                    e.message["name"][0])
            else:
                raise e
        except BotoClientError:
            # we had a problem saving the file - rollback the db changes
            letter_branding_client.update_letter_branding(
                branding_id=branding_id,
                filename=letter_branding["filename"],
                name=letter_branding["name"],
            )
            file_upload_form.file.errors = [
                "Error saving uploaded file - try uploading again"
            ]

    return render_template(
        "views/letter-branding/manage-letter-branding.html",
        file_upload_form=file_upload_form,
        letter_branding_details_form=letter_branding_details_form,
        cdn_url=get_logo_cdn_domain(),
        logo=logo,
        is_update=True,
    )