aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstuppie2026-09-17 10:05:48 -0600
committerstuppie2026-09-17 10:05:48 -0600
commite73cab566ca6f40c213c9a42d34d8f6af8515589 (patch)
tree01ad453e75f8114c59708984ed53cbf066f6e365
parentbb999c73ab563b27e469fc4f74a5f81a5f35fffd (diff)
downloadamt-jb-e73cab566ca6f40c213c9a42d34d8f6af8515589.tar.gz
amt-jb-e73cab566ca6f40c213c9a42d34d8f6af8515589.zip
render_base_html to server base html with js file templated
-rw-r--r--jb/main.py27
-rw-r--r--jb/settings.py12
-rw-r--r--jb/views/auth.py6
-rw-r--r--jb/views/common.py6
-rw-r--r--templates/base.html6
5 files changed, 20 insertions, 37 deletions
diff --git a/jb/main.py b/jb/main.py
index 325bf53..945b22c 100644
--- a/jb/main.py
+++ b/jb/main.py
@@ -7,7 +7,7 @@ from starlette.middleware.cors import CORSMiddleware
from starlette.middleware.trustedhost import TrustedHostMiddleware
from jb.config import settings
-from jb.settings import BASE_HTML, load_manifest
+from jb.settings import render_base_html
from jb.views.auth import auth_router
from jb.views.common import common_router
@@ -45,33 +45,10 @@ def return_nothing() -> dict[str, Any]:
@app.get("/{full_path:path}")
def serve_react_app(full_path: str):
-
- manifest = load_manifest()
- entry = manifest["src/main.tsx"]
- js_file = entry["file"]
- css_file = manifest["style.css"]["file"]
-
- html = f"""<!doctype html>
- <html lang="en-US">
- <head>
- <meta charset="utf-8">
- <meta name="viewport"
- content="width=device-width, initial-scale=1.0, height=device-height, minimum-scale=1.0, user-scalable=1">
- <title>James Billings loves you.</title>
- <link rel="stylesheet"
- href="https://cdn.jamesbillings67.com/{css_file}"
- type="text/css">
- </head>
- <body>
- <div id="root"></div>
- <script src="https://cdn.jamesbillings67.com/{js_file}"></script>
- </body>
- </html>"""
-
# This serves index.html for any unmatched route
# React Router will then handle the client-side routing
return HTMLResponse(
- html,
+ render_base_html(),
headers={
"Cache-Control": "no-cache, no-store, must-revalidate",
"Pragma": "no-cache",
diff --git a/jb/settings.py b/jb/settings.py
index 1bf65bc..779bd85 100644
--- a/jb/settings.py
+++ b/jb/settings.py
@@ -2,7 +2,6 @@ import json
from functools import lru_cache
from os.path import abspath
from os.path import dirname as pdirname
-from os.path import join as pjoin
from pathlib import Path
from generalresearch.config import GRLBaseSettings, is_debug
@@ -16,7 +15,6 @@ from pydantic_settings import SettingsConfigDict
BASE_DIR = pdirname(pdirname(abspath(__file__)))
BASE_HTML_PATH = Path(BASE_DIR) / "templates" / "base.html"
-BASE_HTML = BASE_HTML_PATH.read_text()
MANIFEST_PATH = Path(BASE_DIR) / "jb-ui" / "dist/.vite/manifest.json"
@@ -25,8 +23,16 @@ def load_manifest():
return json.load(f)
-class Settings(GRLBaseSettings):
+def render_base_html() -> str:
+ manifest = load_manifest()
+ return (
+ BASE_HTML_PATH.read_text()
+ .replace("{{ css_file }}", manifest["style.css"]["file"])
+ .replace("{{ js_file }}", manifest["src/main.tsx"]["file"])
+ )
+
+class Settings(GRLBaseSettings):
model_config = SettingsConfigDict(
env_file=(".env.test", ".env.testing", ".env.staging", ".env.prod"),
env_file_encoding="utf-8",
diff --git a/jb/views/auth.py b/jb/views/auth.py
index 1b4c364..cc1224f 100644
--- a/jb/views/auth.py
+++ b/jb/views/auth.py
@@ -32,7 +32,7 @@ from jb.models.auth import (
MagicLinkExchangeRequest,
User,
)
-from jb.settings import BASE_HTML
+from jb.settings import render_base_html
auth_router = APIRouter(prefix="/auth", tags=["Auth"])
@@ -90,7 +90,7 @@ def magic_link_landing_page(
_exchange_magic_link(token, response, gr_api)
return response
return HTMLResponse(
- BASE_HTML,
+ render_base_html(),
headers={
"Cache-Control": "no-store",
"Referrer-Policy": "no-referrer",
@@ -180,7 +180,7 @@ def link_amt_account_landing_page(
_exchange_amt_account_link(token=token, response=_response, gr_api=gr_api)
return HTMLResponse(
- BASE_HTML,
+ render_base_html(),
headers={
"Cache-Control": "no-store",
"Referrer-Policy": "no-referrer",
diff --git a/jb/views/common.py b/jb/views/common.py
index 9eee453..f58acda 100644
--- a/jb/views/common.py
+++ b/jb/views/common.py
@@ -13,7 +13,7 @@ from jb.decorators import get_redis_config
from jb.flow.monitoring import emit_mturk_notification_event
from jb.models.auth import User
from jb.models.event import MTurkEvent
-from jb.settings import BASE_HTML
+from jb.settings import render_base_html
common_router = APIRouter(prefix="", tags=["API"], include_in_schema=True)
@@ -39,7 +39,7 @@ async def work(request: Request):
status_code=302,
)
- return HTMLResponse(BASE_HTML)
+ return HTMLResponse(render_base_html())
RedisConfigDep = Annotated[RedisConfig, Depends(get_redis_config)]
@@ -95,4 +95,4 @@ async def work_direct(
Makes sure user is authenticated.
"""
# todo: emit event
- return HTMLResponse(BASE_HTML)
+ return HTMLResponse(render_base_html())
diff --git a/templates/base.html b/templates/base.html
index c17972e..18bc851 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -6,11 +6,11 @@
content="width=device-width, initial-scale=1.0, height=device-height, minimum-scale=1.0, user-scalable=1">
<title>James Billings loves you.</title>
<link rel="stylesheet"
- href="https://cdn.jamesbillings67.com/james-has-style.css"
+ href="https://cdn.jamesbillings67.com/{{ css_file }}"
type="text/css">
</head>
<body>
<div id="root"></div>
-<script src="https://cdn.jamesbillings67.com/james-billings.js"></script>
+<script src="https://cdn.jamesbillings67.com/{{ js_file }}"></script>
</body>
-</html> \ No newline at end of file
+</html>