Files
notifications-admin/app/template_previews.py
T

106 lines
3.7 KiB
Python
Raw Normal View History

2019-09-09 10:59:32 +01:00
import base64
from io import BytesIO
import requests
2018-02-20 11:22:17 +00:00
from flask import current_app, json
2019-09-09 10:59:32 +01:00
from notifications_utils.pdf import extract_page_from_pdf
2017-04-10 17:25:08 +01:00
from app import current_service
2017-04-10 17:25:08 +01:00
class TemplatePreview:
@classmethod
2017-04-20 10:40:15 +01:00
def from_database_object(cls, template, filetype, values=None, page=None):
2017-04-10 17:25:08 +01:00
data = {
'letter_contact_block': template.get('reply_to_text', ''),
2017-04-10 18:12:00 +01:00
'template': template,
'values': values,
'filename': current_service.letter_branding and current_service.letter_branding['filename']
2017-04-10 17:25:08 +01:00
}
resp = requests.post(
2017-04-20 10:40:15 +01:00
'{}/preview.{}{}'.format(
current_app.config['TEMPLATE_PREVIEW_API_HOST'],
filetype,
'?page={}'.format(page) if page else '',
),
2017-04-10 17:25:08 +01:00
json=data,
2017-04-10 18:12:00 +01:00
headers={'Authorization': 'Token {}'.format(current_app.config['TEMPLATE_PREVIEW_API_KEY'])}
)
return (resp.content, resp.status_code, resp.headers.items())
2019-09-09 10:59:32 +01:00
@classmethod
def from_valid_pdf_file(cls, pdf_file, page):
pdf_page = extract_page_from_pdf(BytesIO(pdf_file), int(page) - 1)
response = requests.post(
'{}/precompiled-preview.png{}'.format(
current_app.config['TEMPLATE_PREVIEW_API_HOST'],
'?hide_notify=true' if page == '1' else ''
),
data=base64.b64encode(pdf_page).decode('utf-8'),
headers={'Authorization': 'Token {}'.format(current_app.config['TEMPLATE_PREVIEW_API_KEY'])}
)
return (response.content, response.status_code, response.headers.items())
@classmethod
def from_invalid_pdf_file(cls, pdf_file, page):
pdf_page = extract_page_from_pdf(BytesIO(pdf_file), int(page) - 1)
response = requests.post(
'{}/precompiled/overlay.png{}'.format(
current_app.config['TEMPLATE_PREVIEW_API_HOST'],
'?page_number={}'.format(page)
),
data=pdf_page,
headers={'Authorization': 'Token {}'.format(current_app.config['TEMPLATE_PREVIEW_API_KEY'])}
)
return (response.content, response.status_code, response.headers.items())
@classmethod
def from_example_template(cls, template, filename):
data = {
'letter_contact_block': template.get('reply_to_text'),
'template': template,
'values': None,
'filename': filename
}
resp = requests.post(
'{}/preview.png'.format(current_app.config['TEMPLATE_PREVIEW_API_HOST']),
json=data,
headers={'Authorization': 'Token {}'.format(current_app.config['TEMPLATE_PREVIEW_API_KEY'])}
2017-04-10 17:25:08 +01:00
)
return (resp.content, resp.status_code, resp.headers.items())
@classmethod
2017-04-20 10:40:15 +01:00
def from_utils_template(cls, template, filetype, page=None):
2017-04-10 17:25:08 +01:00
return cls.from_database_object(
template._template,
filetype,
2017-04-20 10:40:15 +01:00
template.values,
page=page,
2017-04-10 17:25:08 +01:00
)
2017-05-11 12:01:51 +01:00
def get_page_count_for_letter(template, values=None):
if template['template_type'] != 'letter':
return None
2017-05-16 11:43:19 +01:00
page_count, _, _ = TemplatePreview.from_database_object(template, 'json', values)
2017-05-11 12:01:51 +01:00
page_count = json.loads(page_count.decode('utf-8'))['count']
return page_count
2018-09-26 16:42:40 +01:00
def sanitise_letter(pdf_file, *, allow_international_letters):
2019-09-06 17:10:48 +01:00
return requests.post(
'{}/precompiled/sanitise?allow_international_letters={}'.format(
current_app.config['TEMPLATE_PREVIEW_API_HOST'],
'true' if allow_international_letters else 'false',
),
2019-09-06 17:10:48 +01:00
data=pdf_file,
headers={'Authorization': 'Token {}'.format(current_app.config['TEMPLATE_PREVIEW_API_KEY'])}
)