diff --git a/superset/config.py b/superset/config.py index f18fcca8a863a..501d30397b6cb 100644 --- a/superset/config.py +++ b/superset/config.py @@ -435,6 +435,20 @@ def _try_json_readsha( # pylint: disable=unused-argument # return feature_flags_dict GET_FEATURE_FLAGS_FUNC: Optional[Callable[[Dict[str, bool]], Dict[str, bool]]] = None +# A function that expands/overrides the frontend `bootstrap_data.common` object. +# Can be used to implement custom frontend functionality, +# or dynamically change certain configs. +# +# Values in `bootstrap_data.common` should have these characteristics: +# - They are not specific to a page the user is visiting +# - They do not contain secrets +# +# Takes as a parameter the common bootstrap payload before transformations. +# Returns a dict containing data that should be added or overridden to the payload. +COMMON_BOOTSTRAP_OVERRIDES_FUNC: Callable[ + [Dict[str, Any]], Dict[str, Any] +] = lambda data: {} # default: empty dict + # EXTRA_CATEGORICAL_COLOR_SCHEMES is used for adding custom categorical color schemes # example code for "My custom warm to hot" color scheme # EXTRA_CATEGORICAL_COLOR_SCHEMES = [ diff --git a/superset/views/base.py b/superset/views/base.py index 2de98b5e6b91e..20187299fee85 100644 --- a/superset/views/base.py +++ b/superset/views/base.py @@ -350,7 +350,7 @@ def common_bootstrap_payload() -> Dict[str, Any]: messages = get_flashed_messages(with_categories=True) locale = str(get_locale()) - return { + bootstrap_data = { "flash_messages": messages, "conf": {k: conf.get(k) for k in FRONTEND_CONF_KEYS}, "locale": locale, @@ -361,6 +361,8 @@ def common_bootstrap_payload() -> Dict[str, Any]: "theme_overrides": conf["THEME_OVERRIDES"], "menu_data": menu_data(), } + bootstrap_data.update(conf["COMMON_BOOTSTRAP_OVERRIDES_FUNC"](bootstrap_data)) + return bootstrap_data # pylint: disable=invalid-name