Dynamic asset url depending on request host

This commit is contained in:
2023-03-14 14:36:02 +01:00
parent 8aac5376df
commit b1d0e115f4
3 changed files with 19 additions and 19 deletions

View File

@@ -2,7 +2,7 @@ import datetime
import os import os
import base64 import base64
from fastapi import APIRouter, HTTPException from fastapi import APIRouter, HTTPException, Request
from fastapi.responses import HTMLResponse, FileResponse from fastapi.responses import HTMLResponse, FileResponse
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
@@ -61,47 +61,47 @@ print_router = APIRouter()
templates = Jinja2Templates(directory=str(BASE_PATH / "templates")) templates = Jinja2Templates(directory=str(BASE_PATH / "templates"))
async def render_print(host, contract): async def render_print(root_url, contract):
template = templates.get_template("print.html") template = templates.get_template("print.html")
return template.render({ return template.render({
"contract": contract, "contract": contract,
"static_host": host "root_url": root_url
}) })
async def render_css(host, contract): async def render_css(root_url, contract):
template = templates.get_template("styles.css") template = templates.get_template("styles.css")
return template.render({ return template.render({
"contract": contract, "contract": contract,
"static_host": host "root_url": root_url
}) })
@print_router.get("/preview/draft/{draft_id}", response_class=HTMLResponse) @print_router.get("/preview/draft/{draft_id}", response_class=HTMLResponse)
async def preview_draft(draft_id: str) -> str: async def preview_draft(draft_id: str, request: Request) -> str:
draft = await build_model(await ContractDraft.get(draft_id)) draft = await build_model(await ContractDraft.get(draft_id))
return await render_print('localhost', draft) return await render_print(f'{request.url.scheme}://{request.url.hostname}', draft)
@print_router.get("/preview/signature/{signature_id}", response_class=HTMLResponse) @print_router.get("/preview/signature/{signature_id}", response_class=HTMLResponse)
async def preview_contract_by_signature(signature_id: str) -> str: async def preview_contract_by_signature(signature_id: str, request: Request) -> str:
contract = await Contract.find_by_signature_id(signature_id) contract = await Contract.find_by_signature_id(signature_id)
for p in contract.parties: for p in contract.parties:
if p.signature_affixed: if p.signature_affixed:
p.signature_png = retrieve_signature_png(f'media/signatures/{p.signature_uuid}.png') p.signature_png = retrieve_signature_png(f'media/signatures/{p.signature_uuid}.png')
return await render_print('localhost', contract) return await render_print(f'{request.url.scheme}://{request.url.hostname}', contract)
@print_router.get("/preview/{contract_id}", response_class=HTMLResponse) @print_router.get("/preview/{contract_id}", response_class=HTMLResponse)
async def preview_contract(contract_id: str) -> str: async def preview_contract(contract_id: str, request: Request) -> str:
contract = await Contract.get(contract_id) contract = await Contract.get(contract_id)
for p in contract.parties: for p in contract.parties:
if p.signature_affixed: if p.signature_affixed:
p.signature_png = retrieve_signature_png(f'media/signatures/{p.signature_uuid}.png') p.signature_png = retrieve_signature_png(f'media/signatures/{p.signature_uuid}.png')
return await render_print('localhost', contract) return await render_print(f'{request.url.scheme}://{request.url.hostname}', contract)
@print_router.get("/pdf/{contract_id}", response_class=FileResponse) @print_router.get("/pdf/{contract_id}", response_class=FileResponse)
@@ -118,8 +118,8 @@ async def create_pdf(contract_id: str) -> str:
# os.remove(signature_path) # os.remove(signature_path)
font_config = FontConfiguration() font_config = FontConfiguration()
html = HTML(string=await render_print('nginx', contract)) html = HTML(string=await render_print('http://nginx', contract))
css = CSS(string=await render_css('nginx', contract), font_config=font_config) css = CSS(string=await render_css('http://nginx', contract), font_config=font_config)
html.write_pdf(contract_path, stylesheets=[css], font_config=font_config) html.write_pdf(contract_path, stylesheets=[css], font_config=font_config)
update_query = {"$set": { update_query = {"$set": {

View File

@@ -8,7 +8,7 @@
<div class="frontpage"> <div class="frontpage">
<div id="front-page-header"> <div id="front-page-header">
<table><tr> <table><tr>
<td><img id="top-logo" src="http://{{ static_host }}/assets/logotransparent.png" alt="Cooper, Hillman & Toshi logo"></td> <td><img id="top-logo" src="{{ root_url }}/assets/logotransparent.png" alt="Cooper, Hillman & Toshi logo"></td>
<td id="office-info">Cooper, Hillman & Toshi LLP<br />6834 Innocence Boulevard<br />LOS SANTOS - SA<br /><a href="#">consulting@cht.law.com</a></td> <td id="office-info">Cooper, Hillman & Toshi LLP<br />6834 Innocence Boulevard<br />LOS SANTOS - SA<br /><a href="#">consulting@cht.law.com</a></td>
</tr></table> </tr></table>
<h1>{{ contract.title|upper }}</h1> <h1>{{ contract.title|upper }}</h1>

View File

@@ -1,24 +1,24 @@
@font-face { @font-face {
font-family: 'Century Schoolbook'; font-family: 'Century Schoolbook';
src: url('http://{{ static_host }}/assets/century-schoolbook/CenturySchoolbookRegular.ttf'); src: url('{{ root_url }}/assets/century-schoolbook/CenturySchoolbookRegular.ttf');
} }
@font-face { @font-face {
font-family: "Century Schoolbook"; font-family: "Century Schoolbook";
src: url("http://{{ static_host }}/assets/century-schoolbook/CenturySchoolbookBold.ttf"); src: url("{{ root_url }}/assets/century-schoolbook/CenturySchoolbookBold.ttf");
font-weight: bold; font-weight: bold;
} }
@font-face { @font-face {
font-family: "Century Schoolbook"; font-family: "Century Schoolbook";
src: url("http://{{ static_host }}/assets/century-schoolbook/CenturySchoolbookItalic.ttf"); src: url("{{ root_url }}/assets/century-schoolbook/CenturySchoolbookItalic.ttf");
font-style: italic; font-style: italic;
} }
@font-face { @font-face {
font-family: "Century Schoolbook"; font-family: "Century Schoolbook";
src: url("http://{{ static_host }}/assets/century-schoolbook/CenturySchoolbookBoldItalic.ttf"); src: url("{{ root_url }}/assets/century-schoolbook/CenturySchoolbookBoldItalic.ttf");
font-weight: bold; font-weight: bold;
font-style: italic; font-style: italic;
} }
@@ -31,7 +31,7 @@
content: "© Cooper, Hillman & Toshi LLC - {{ contract.name }} - Page " counter(page) "/" counter(pages); content: "© Cooper, Hillman & Toshi LLC - {{ contract.name }} - Page " counter(page) "/" counter(pages);
font-size: 0.8em; font-size: 0.8em;
} }
background: url('http://{{ static_host }}/assets/watermark.png') no-repeat; background: url('{{ root_url }}/assets/watermark.png') no-repeat;
background-size:contain; background-size:contain;
} }