From 64d162d96eeaf04af74b6c7c527c041a19dd5c07 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Mon, 10 Apr 2017 15:10:34 +0100 Subject: [PATCH] Generate letter previews in the new notifications-template-preview service by calling through to this, we no longer require admin app to ship with binary dependencies (imagemagick/cairo/etc) --- app/config.py | 2 ++ app/main/views/templates.py | 32 ++++++++++++++++++++++---------- app/template_previews.py | 17 +++++++++++++++++ 3 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 app/template_previews.py diff --git a/app/config.py b/app/config.py index 6cc115ae6..a7b54d2ce 100644 --- a/app/config.py +++ b/app/config.py @@ -20,6 +20,8 @@ class Config(object): # if we're not on cloudfoundry, we can get to this app from localhost. but on cloudfoundry its different ADMIN_BASE_URL = os.environ.get('ADMIN_BASE_URL', 'http://localhost:6012') + TEMPLATE_PREVIEW_SERVICE_URL = os.environ.get('TEMPLATE_PREVIEW_SERVICE_URL', 'http://localhost:6013') + # Hosted graphite statsd prefix STATSD_PREFIX = os.getenv('STATSD_PREFIX') diff --git a/app/main/views/templates.py b/app/main/views/templates.py index cb6831304..a5ca308f4 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -1,5 +1,6 @@ from datetime import datetime, timedelta from string import ascii_uppercase +from io import StringIO from flask import ( request, @@ -14,6 +15,7 @@ from flask import ( from flask_login import login_required, current_user from flask_weasyprint import HTML, render_pdf from dateutil.parser import parse +import requests from notifications_utils.formatters import escape_html from notifications_utils.template import LetterPreviewTemplate @@ -87,26 +89,36 @@ def view_template(service_id, template_id): ) +def get_template_preview(service_id, template_id, filetype): + db_template = service_api_client.get_service_template(service_id, template_id)['data'] + data = { + "letter_contact_block": current_service['letter_contact_block'], + "admin_base_url": current_app.config['ADMIN_BASE_URL'], + "template": db_template, + "values": None + } + resp = requests.post( + '{}/preview.{}'.format(current_app.config['TEMPLATE_PREVIEW_SERVICE_URL'], filetype), + json=data, + headers={'Authorization': 'Token my-secret-key'} + ) + return resp + + @main.route("/services//templates/.pdf") @login_required @user_has_permissions('view_activity', admin_override=True) def view_letter_template_as_pdf(service_id, template_id): - return render_pdf(HTML(string=str( - LetterPreviewTemplate( - service_api_client.get_service_template(service_id, template_id)['data'], - contact_block=current_service['letter_contact_block'], - admin_base_url=current_app.config['ADMIN_BASE_URL'] - ) - ))) + resp = get_template_preview(service_id, template_id, 'pdf') + return (resp.content, resp.status_code, resp.headers.items()) @main.route("/services//templates/.png") @login_required @user_has_permissions('view_activity', admin_override=True) def view_letter_template_as_png(service_id, template_id): - return send_file(**png_from_pdf( - view_letter_template_as_pdf(service_id, template_id) - )) + resp = get_template_preview(service_id, template_id, 'png') + return (resp.content, resp.status_code, resp.headers.items()) def _view_template_version(service_id, template_id, version, letters_as_pdf=False): diff --git a/app/template_previews.py b/app/template_previews.py new file mode 100644 index 000000000..5fb6a280f --- /dev/null +++ b/app/template_previews.py @@ -0,0 +1,17 @@ +from flask import current_app, current_service +import requests + + +def get_template_preview(template, filetype): + data = { + "letter_contact_block": current_service['letter_contact_block'], + "admin_base_url": current_app.config['ADMIN_BASE_URL'], + "template": template, + "values": None + } + resp = requests.post( + '{}/preview.{}'.format(current_app.config['TEMPLATE_PREVIEW_SERVICE_URL'], filetype), + json=data, + headers={'Authorization': 'Token my-secret-key'} + ) + return (resp.content, resp.status_code, resp.headers.items())