Source code for sirepo.modules
# -*- coding: utf-8 -*-
"""initialize modules based on mode
:copyright: Copyright (c) 2022 RadiaSoft LLC. All Rights Reserved.
:license: http://www.apache.org/licenses/LICENSE-2.0.html
"""
from pykern.pkcollections import PKDict
from pykern.pkdebug import pkdc, pkdlog, pkdp
import importlib
[docs]
def import_and_init(name):
values = PKDict(
want_apis=name != "sirepo.job_supervisor",
)
def _base(qual):
return qual.split(".")[-1]
def _i(to_import, kw):
pkdc("{}", to_import)
m = importlib.import_module(to_import)
m.init_module(**{k: values[k] for k in kw})
values[_base(to_import)] = m
return m
# Modules must protect themselves from duplicate initialization
# TODO(robnagler) eliminate this by storing global state in modules that is read by _i()
_i("sirepo.srtime", [])
_i("sirepo.job", [])
# Not a real initialization, but needed in values, and actually makes sense to do
_i("sirepo.simulation_db", [])
if name != "sirepo.pkcli.job_agent":
_i("sirepo.auth_db", [])
_i("sirepo.spa_session", [])
_i("sirepo.cookie", [])
_i("sirepo.auth", ["simulation_db"])
if name in "sirepo.pkcli.job_agent":
return None
m = _i("sirepo.uri_router", ["want_apis", "simulation_db"])
if "sirepo.uri_router" == name:
# Used only by sirepo.server so everything else should already be initialized
return m
m = _i("sirepo.uri", ["simulation_db", "uri_router"])
_i("sirepo.http_request", ["simulation_db"])
_i("sirepo.reply", ["simulation_db"])
_i("sirepo.uri", ["simulation_db", "uri_router"])
_i("sirepo.quest", ["reply", "http_request", "uri_router"])
if name in ("sirepo.auth", "sirepo.uri", "sirepo.auth_db"):
return values[_base(name)]
if "sirepo.job_supervisor" == name:
# job_supervisor doesn't need job_driver in its init so hack this
values.job_driver = importlib.import_module("sirepo.job_driver")
_i("sirepo.job_supervisor", ["job_driver"])
_i("sirepo.job_driver", ["job_supervisor"])
return values[_base(name)]
if "sirepo.server" == name:
return _i("sirepo.server", [])
raise AssertionError(f"unsupported module={name}")