mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-05-27 09:29:22 -04:00
remove pdf/png code from admin app entirely
while PDFs work on paas, they only do that because it turns out the python buildpack happens to have imagemagick preinstalled - if that ever changes then it'd break. so move those to the template preview service. This also means we can get rid of weazyprint and wand dependencies
This commit is contained in:
@@ -19,7 +19,6 @@ from flask import (
|
||||
)
|
||||
|
||||
from flask_login import login_required, current_user
|
||||
from flask_weasyprint import HTML, render_pdf
|
||||
|
||||
from notifications_utils.columns import Columns
|
||||
from notifications_utils.recipients import RecipientCSV, first_column_headings, validate_and_format_phone_number
|
||||
@@ -36,9 +35,9 @@ from app.utils import (
|
||||
get_errors_for_csv,
|
||||
Spreadsheet,
|
||||
get_help_argument,
|
||||
get_template,
|
||||
png_from_pdf,
|
||||
get_template
|
||||
)
|
||||
from app.template_previews import TemplatePreview
|
||||
|
||||
|
||||
def get_page_headings(template_type):
|
||||
@@ -291,24 +290,14 @@ def check_messages(service_id, template_type, upload_id):
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/<template_type>/check/<upload_id>.pdf", methods=['GET'])
|
||||
@main.route("/services/<service_id>/<template_type>/check/<upload_id>.<filetype>", methods=['GET'])
|
||||
@login_required
|
||||
@user_has_permissions('send_texts', 'send_emails', 'send_letters')
|
||||
def check_messages_as_pdf(service_id, template_type, upload_id):
|
||||
def check_messages_preview(service_id, template_type, upload_id, filetype):
|
||||
template = _check_messages(
|
||||
service_id, template_type, upload_id, letters_as_pdf=True
|
||||
)['template']
|
||||
return render_pdf(HTML(string=str(template)))
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/<template_type>/check/<upload_id>.png", methods=['GET'])
|
||||
@login_required
|
||||
@user_has_permissions('send_texts', 'send_emails', 'send_letters')
|
||||
def check_messages_as_png(service_id, template_type, upload_id):
|
||||
return send_file(**png_from_pdf(
|
||||
check_messages_as_pdf(service_id, template_type, upload_id)
|
||||
))
|
||||
|
||||
return TemplatePreview.from_utils_template(template, filetype)
|
||||
|
||||
@main.route("/services/<service_id>/<template_type>/check/<upload_id>", methods=['POST'])
|
||||
@login_required
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
from datetime import datetime, timedelta
|
||||
from string import ascii_uppercase
|
||||
from io import StringIO
|
||||
|
||||
from flask import (
|
||||
request,
|
||||
@@ -9,21 +8,17 @@ from flask import (
|
||||
url_for,
|
||||
flash,
|
||||
abort,
|
||||
send_file,
|
||||
current_app
|
||||
)
|
||||
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
|
||||
from notifications_utils.recipients import first_column_headings
|
||||
from notifications_python_client.errors import HTTPError
|
||||
|
||||
from app.main import main
|
||||
from app.utils import user_has_permissions, get_template, png_from_pdf
|
||||
from app.utils import user_has_permissions, get_template
|
||||
from app.template_previews import TemplatePreview
|
||||
from app.main.forms import (
|
||||
ChooseTemplateType,
|
||||
SMSTemplateForm,
|
||||
@@ -89,37 +84,12 @@ def view_template(service_id, template_id):
|
||||
)
|
||||
|
||||
|
||||
def get_template_preview(service_id, template_id, filetype):
|
||||
@main.route("/services/<service_id>/templates/<template_id>.<filetype>")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity', admin_override=True)
|
||||
def view_letter_template_as_filetype(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/<service_id>/templates/<template_id>.pdf")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity', admin_override=True)
|
||||
def view_letter_template_as_pdf(service_id, template_id):
|
||||
resp = get_template_preview(service_id, template_id, 'pdf')
|
||||
return (resp.content, resp.status_code, resp.headers.items())
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/templates/<template_id>.png")
|
||||
@login_required
|
||||
@user_has_permissions('view_activity', admin_override=True)
|
||||
def view_letter_template_as_png(service_id, template_id):
|
||||
resp = get_template_preview(service_id, template_id, 'png')
|
||||
return (resp.content, resp.status_code, resp.headers.items())
|
||||
|
||||
return TemplatePreview.from_database_object(db_template, filetype)
|
||||
|
||||
def _view_template_version(service_id, template_id, version, letters_as_pdf=False):
|
||||
return dict(template=get_template(
|
||||
@@ -153,7 +123,7 @@ def view_template_version(service_id, template_id, version):
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/templates/<template_id>/version/<int:version>.pdf")
|
||||
@main.route("/services/<service_id>/templates/<template_id>/version/<int:version>.<filetype>")
|
||||
@login_required
|
||||
@user_has_permissions(
|
||||
'view_activity',
|
||||
@@ -164,31 +134,9 @@ def view_template_version(service_id, template_id, version):
|
||||
admin_override=True,
|
||||
any_=True
|
||||
)
|
||||
def view_template_version_as_pdf(service_id, template_id, version):
|
||||
return render_pdf(HTML(string=str(
|
||||
LetterPreviewTemplate(
|
||||
service_api_client.get_service_template(service_id, template_id, version=version)['data'],
|
||||
contact_block=current_service['letter_contact_block'],
|
||||
admin_base_url=current_app.config['ADMIN_BASE_URL']
|
||||
)
|
||||
)))
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/templates/<template_id>/version/<int:version>.png")
|
||||
@login_required
|
||||
@user_has_permissions(
|
||||
'view_activity',
|
||||
'send_texts',
|
||||
'send_emails',
|
||||
'manage_templates',
|
||||
'manage_api_keys',
|
||||
admin_override=True,
|
||||
any_=True
|
||||
)
|
||||
def view_template_version_as_png(service_id, template_id, version):
|
||||
return send_file(**png_from_pdf(
|
||||
view_template_version_as_pdf(service_id, template_id, version)
|
||||
))
|
||||
def view_template_version_preview(service_id, template_id, version, filetype):
|
||||
db_template = service_api_client.get_service_template(service_id, template_id, version=version)['data']
|
||||
return TemplatePreview.from_database_object(db_template, filetype)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/templates/add", methods=['GET', 'POST'])
|
||||
|
||||
@@ -1,17 +1,29 @@
|
||||
from flask import current_app, current_service
|
||||
from flask import current_app
|
||||
import requests
|
||||
|
||||
from app import current_service
|
||||
|
||||
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())
|
||||
|
||||
class TemplatePreview:
|
||||
@classmethod
|
||||
def from_database_object(cls, template, filetype, values=None):
|
||||
data = {
|
||||
"letter_contact_block": current_service['letter_contact_block'],
|
||||
"admin_base_url": current_app.config['ADMIN_BASE_URL'],
|
||||
"template": template,
|
||||
"values": values
|
||||
}
|
||||
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())
|
||||
|
||||
@classmethod
|
||||
def from_utils_template(cls, template, filetype):
|
||||
return cls.from_database_object(
|
||||
template._template,
|
||||
filetype,
|
||||
template.values
|
||||
)
|
||||
|
||||
17
app/utils.py
17
app/utils.py
@@ -16,8 +16,6 @@ from flask import (
|
||||
)
|
||||
from flask_login import current_user
|
||||
|
||||
from wand.image import Image
|
||||
|
||||
from notifications_utils.template import (
|
||||
SMSPreviewTemplate,
|
||||
EmailPreviewTemplate,
|
||||
@@ -327,21 +325,6 @@ def get_template(
|
||||
)
|
||||
|
||||
|
||||
def png_from_pdf(pdf_endpoint):
|
||||
output = BytesIO()
|
||||
with Image(
|
||||
blob=pdf_endpoint.get_data(),
|
||||
resolution=150,
|
||||
) as image:
|
||||
with image.convert('png') as converted:
|
||||
converted.save(file=output)
|
||||
output.seek(0)
|
||||
return dict(
|
||||
filename_or_fp=output,
|
||||
mimetype='image/png',
|
||||
)
|
||||
|
||||
|
||||
def get_current_financial_year():
|
||||
now = datetime.utcnow()
|
||||
current_month = int(now.strftime('%-m'))
|
||||
|
||||
@@ -4,9 +4,7 @@ Flask==0.10.1
|
||||
Flask-Script==2.0.5
|
||||
Flask-WTF==0.11
|
||||
Flask-Login==0.3.2
|
||||
Flask-WeasyPrint==0.5
|
||||
|
||||
html5lib==1.0b10
|
||||
credstash==1.8.0
|
||||
boto3==1.4.4
|
||||
Pygments==2.0.2
|
||||
@@ -20,7 +18,6 @@ pyexcel-xlsx==0.1.0
|
||||
pyexcel-ods3==0.1.1
|
||||
pytz==2016.4
|
||||
six==1.10.0
|
||||
wand==0.4.4
|
||||
gunicorn==19.6.0
|
||||
whitenoise==1.0.6 #manages static assets
|
||||
|
||||
|
||||
Reference in New Issue
Block a user