feat: add project fork async job service with cli prune/clear commands and shared container image build target
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import logging
|
||||
|
||||
from markupsafe import Markup
|
||||
from starlette.requests import Request
|
||||
|
||||
from devplacepy.constants import DEVII_GUEST_COOKIE
|
||||
from devplacepy.database import get_custom_overrides, get_setting
|
||||
from devplacepy.utils import get_current_user
|
||||
|
||||
logger = logging.getLogger("customization")
|
||||
|
||||
EMPTY = Markup("")
|
||||
|
||||
|
||||
def page_type_for(request: Request) -> str:
|
||||
route = request.scope.get("route")
|
||||
path = getattr(route, "path", None)
|
||||
if path:
|
||||
return path
|
||||
return request.url.path
|
||||
|
||||
|
||||
def owner_for(request: Request) -> tuple[str, str] | None:
|
||||
user = get_current_user(request)
|
||||
if user:
|
||||
return "user", user["uid"]
|
||||
guest = request.cookies.get(DEVII_GUEST_COOKIE)
|
||||
if guest:
|
||||
return "guest", guest
|
||||
return None
|
||||
|
||||
|
||||
def _overrides_for(request: Request) -> dict:
|
||||
if get_setting("customization_enabled", "1") != "1":
|
||||
return {"css": "", "js": ""}
|
||||
owner = owner_for(request)
|
||||
if owner is None:
|
||||
return {"css": "", "js": ""}
|
||||
return get_custom_overrides(owner[0], owner[1], page_type_for(request))
|
||||
|
||||
|
||||
def custom_css_tag(request: Request) -> Markup:
|
||||
try:
|
||||
css = _overrides_for(request).get("css", "")
|
||||
if not css.strip():
|
||||
return EMPTY
|
||||
safe = css.replace("</", "<\\/")
|
||||
return Markup(f'<style id="user-custom-css">\n{safe}\n</style>')
|
||||
except Exception as exc: # noqa: BLE001 - a customization bug must never break page render
|
||||
logger.warning("custom_css_tag failed: %s", exc)
|
||||
return EMPTY
|
||||
|
||||
|
||||
def custom_js_tag(request: Request) -> Markup:
|
||||
try:
|
||||
if get_setting("customization_js_enabled", "1") != "1":
|
||||
return EMPTY
|
||||
code = _overrides_for(request).get("js", "")
|
||||
if not code.strip():
|
||||
return EMPTY
|
||||
payload = json.dumps(code).replace("<", "\\u003c").replace(">", "\\u003e")
|
||||
runner = (
|
||||
f'<script type="application/json" id="user-custom-js-src">{payload}</script>'
|
||||
'<script>(function(){try{'
|
||||
'var src=document.getElementById("user-custom-js-src");'
|
||||
'if(src){new Function(JSON.parse(src.textContent))();}'
|
||||
'}catch(error){console.error("user custom js error",error);}})();</script>'
|
||||
)
|
||||
return Markup(runner)
|
||||
except Exception as exc: # noqa: BLE001 - a customization bug must never break page render
|
||||
logger.warning("custom_js_tag failed: %s", exc)
|
||||
return EMPTY
|
||||
Reference in New Issue
Block a user