Merge pull request #779 from alphagov/switch-to-cloudfront

use cloudfront instead of flask to serve static images
This commit is contained in:
Leo Hemsted
2016-12-29 11:35:05 +00:00
committed by GitHub
4 changed files with 68 additions and 12 deletions

View File

@@ -1,3 +1,4 @@
from urllib import parse
from datetime import datetime
from flask import current_app
@@ -121,17 +122,53 @@ def provider_to_use(notification_type, notification_id):
return clients.get_client_by_name_and_type(active_providers_in_order[0].identifier, notification_type)
def get_logo_url(base_url, branding_path, logo_file):
"""
Get the complete URL for a given logo.
We have to convert the base_url into a static url. Our hosted environments all have their own cloudfront instances,
found at the static subdomain (eg https://static.notifications.service.gov.uk).
If running locally (dev environment), don't try and use cloudfront - just stick to the actual underlying source
({URL}/static/{PATH})
"""
base_url = parse.urlparse(base_url)
netloc = base_url.netloc
if base_url.netloc.startswith('localhost'):
netloc = 'localhost:6012'
path = '/static' + branding_path + logo_file
else:
if base_url.netloc.startswith('www'):
# strip "www."
netloc = base_url.netloc[4:]
netloc = 'static.' + netloc
path = branding_path + logo_file
logo_url = parse.ParseResult(
scheme=base_url.scheme,
netloc=netloc,
path=path,
params=base_url.params,
query=base_url.query,
fragment=base_url.fragment
)
return parse.urlunparse(logo_url)
def get_html_email_options(service):
govuk_banner = service.branding != BRANDING_ORG
if service.organisation:
logo = '{}{}{}'.format(
logo_url = get_logo_url(
current_app.config['ADMIN_BASE_URL'],
current_app.config['BRANDING_PATH'],
service.organisation.logo
)
branding = {
'brand_colour': service.organisation.colour,
'brand_logo': logo,
'brand_logo': logo_url,
'brand_name': service.organisation.name,
}
else:

View File

@@ -59,7 +59,7 @@ class Config(object):
SQLALCHEMY_TRACK_MODIFICATIONS = True
PAGE_SIZE = 50
SMS_CHAR_COUNT_LIMIT = 495
BRANDING_PATH = '/static/images/email-template/crests/'
BRANDING_PATH = '/images/email-template/crests/'
TEST_MESSAGE_FILENAME = 'Test message'
NOTIFY_SERVICE_ID = 'd6aa2c68-a2d9-4437-ab19-3ae8eb202553'

View File

@@ -20,8 +20,9 @@ statsd==3.2.1
jsonschema==2.5.1
Flask-Redis==0.1.0
git+https://github.com/alphagov/notifications-python-client.git@3.0.0#egg=notifications-python-client==3.0.0
# pin to minor version 3.1.x
notifications-python-client>=3.1,<3.2
git+https://github.com/alphagov/notifications-utils.git@12.1.1#egg=notifications-utils==12.1.1
git+https://github.com/alphagov/notifications-utils.git@12.2.0#egg=notifications-utils==12.2.0
git+https://github.com/alphagov/boto.git@2.43.0-patch3#egg=boto==2.43.0-patch3

View File

@@ -1,5 +1,6 @@
import uuid
from datetime import datetime
from collections import namedtuple
import pytest
from unittest.mock import ANY
@@ -379,18 +380,35 @@ def test_get_html_email_renderer_with_branding_details(branding_type, govuk_bann
assert options['brand_name'] == 'Justice League'
def test_get_html_email_renderer_prepends_logo_path(notify_db, sample_service):
sample_service.branding = BRANDING_ORG
org = Organisation(colour='#000000', logo='justice-league.png', name='Justice League')
sample_service.organisation = org
notify_db.session.add_all([sample_service, org])
notify_db.session.commit()
def test_get_html_email_renderer_prepends_logo_path(notify_api):
Service = namedtuple('Service', ['branding', 'organisation'])
Organisation = namedtuple('Organisation', ['colour', 'name', 'logo'])
renderer = send_to_providers.get_html_email_options(sample_service)
org = Organisation(colour='#000000', logo='justice-league.png', name='Justice League')
service = Service(branding=BRANDING_ORG, organisation=org)
renderer = send_to_providers.get_html_email_options(service)
assert renderer['brand_logo'] == 'http://localhost:6012/static/images/email-template/crests/justice-league.png'
@pytest.mark.parametrize('base_url, expected_url', [
# don't change localhost to prevent errors when testing locally
('http://localhost:6012', 'http://localhost:6012/static/sub-path/filename.png'),
# on other environments, replace www with staging
('https://www.notifications.service.gov.uk', 'https://static.notifications.service.gov.uk/sub-path/filename.png'),
('https://www.notify.works', 'https://static.notify.works/sub-path/filename.png'),
('https://notify.works', 'https://static.notify.works/sub-path/filename.png'),
])
def test_get_logo_url_works_for_different_environments(base_url, expected_url):
branding_path = '/sub-path/'
logo_file = 'filename.png'
logo_url = send_to_providers.get_logo_url(base_url, branding_path, logo_file)
assert logo_url == expected_url
def test_should_not_set_billable_units_if_research_mode(notify_db, sample_service, sample_notification, mocker):
mocker.patch('app.mmg_client.send_sms')
mocker.patch('app.mmg_client.get_name', return_value="mmg")