Source code for httk.serve.web.widgets.optimade_assets
"""Expose the built-in OPTIMADE protocol asset to site-local widgets."""
from importlib.resources import files
from .core import WidgetAsset, WidgetContext
def _internal_root(context: WidgetContext) -> str:
"""Return the deployment-relative internal asset root for a page.
:param context: Widget invocation context.
:return: Safe relative internal root URL.
:raises ValueError: If the page has no safe relative base URL.
"""
relative_base = context.page.get("relbaseurl", ".")
if not isinstance(relative_base, str) or not relative_base or relative_base.startswith("/"):
raise ValueError("page context has no safe relative base URL")
return f"{relative_base.rstrip('/')}/_httk/serve"
[docs]
def optimade_protocol_asset() -> WidgetAsset:
"""Return the registered-compatible built-in OPTIMADE protocol module.
:return: The protocol module asset used by ``optimade_table``.
"""
asset = files("httk.serve.web").joinpath("assets/serve-optimade-table-protocol.mjs")
return WidgetAsset("serve-optimade-table-protocol.mjs", asset.read_bytes(), "text/javascript")
[docs]
def optimade_protocol_href(context: WidgetContext) -> str:
"""Return the protocol module URL for a page.
:param context: Widget invocation context.
:return: Deployment-relative protocol module URL.
"""
return f"{_internal_root(context)}/assets/serve-optimade-table-protocol.mjs"