diff --git a/superset/config.py b/superset/config.py index 6e8c341ec789d..c0946740c57ff 100644 --- a/superset/config.py +++ b/superset/config.py @@ -428,6 +428,20 @@ def _try_json_readsha(filepath: str, length: int) -> Optional[str]: # 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 f85d33a10cee0..3d4f988259657 100644 --- a/superset/views/base.py +++ b/superset/views/base.py @@ -346,7 +346,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, @@ -357,6 +357,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