Source code for sirepo.html

# -*- coding: utf-8 -*-
"""html template

:copyright: Copyright (c) 2020 RadiaSoft LLC.  All Rights Reserved.
:license: http://www.apache.org/licenses/LICENSE-2.0.html
"""
from __future__ import absolute_import, division, print_function
from pykern.pkcollections import PKDict
from pykern.pkdebug import pkdc, pkdlog, pkdp
import pykern.pkio
import re
import sys


_CALL_RE = re.compile(r"^\s+(\w+)\(([^\)]*)\);", flags=re.MULTILINE)

_ARGS_RE = re.compile(r"\s*,\s*")

_ARG_RE = re.compile(r"^(\w+)=(.*)$", flags=re.DOTALL)

_FUNC_MAP = PKDict()

_FUNC_PREFIX = "_widget_"


[docs] def render(path): def _dispatch(match): f = match.group(1) assert f in _FUNC_MAP, f"function={f} not in map path={path}" k = PKDict(ctx=PKDict(path=path)) for a in _ARGS_RE.split(match.group(2).strip()): if not a: continue m = _ARG_RE.search(a) assert m, f"invalid keyword argument={a} function={f} path={path}" assert ( m.group(1) not in k ), f"duplicate keyword argument={a} function={f} path={path}" k[m.group(1)] = m.group(2) return _FUNC_MAP[f](**k) return _CALL_RE.sub(_dispatch, pykern.pkio.read_text(path))
def _init(): import sys, inspect for n, o in inspect.getmembers(sys.modules[__name__]): if n.startswith(_FUNC_PREFIX) and inspect.isfunction(o): _FUNC_MAP[n[len(_FUNC_PREFIX) :]] = o def _widget_sim_settings_and_status(ctx, scope): return f"""<div class="col-md-6 col-xl-4"> <div data-basic-editor-panel="" data-view-name="simulationSettings"></div> </div> <div class="col-md-6 col-xl-4"> <div data-simple-panel="simulationStatus"> <div data-sim-status-panel="{scope}.simState"></div> </div> </div> <div class="clearfix"></div>""" def _widget_supported_codes(ctx): import sirepo.feature_config res = """<li class="supported-codes"> <button class="dropdown-toggle" type="button" id="sr-landing-supported-codes" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> <span>Supported Codes</span> <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="sr-landing-supported-codes"> """ # TODO(e-carlin): https://git.radiasoft.org/sirepo/issues/3632 x = PKDict([(s, s) for s in sirepo.feature_config.cfg().sim_types]) x.pkupdate( jupyter="jupyterhublogin", ) r = """ <div class="container"> <div class="row"> """ for k in sorted(x.keys()): r += f""" <div class="col-xl-3 col-lg-4 col-sm-6 "> <p style="margin: 1em;" class="text-center"> <a href="/{x[k]}" style="width: 250px;" class="btn-link"><span>{k.upper()}</span></a> </p> </div> """ r += """ </div> </div> """ return r _init()