From d23b20ea75457f35efbd25ca6b36f594e47eef91 Mon Sep 17 00:00:00 2001 From: Elizabeth Thompson Date: Fri, 4 Aug 2023 09:04:14 -0700 Subject: [PATCH] chore: add talisman env var to config (#24774) --- superset/config.py | 4 ++- superset/utils/core.py | 2 ++ tests/unit_tests/utils/test_core.py | 39 +++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/superset/config.py b/superset/config.py index 9c65d568e441b..75fda6eb37a1c 100644 --- a/superset/config.py +++ b/superset/config.py @@ -54,6 +54,7 @@ from superset.stats_logger import DummyStatsLogger from superset.superset_typing import CacheConfig from superset.tasks.types import ExecutorType +from superset.utils import core as utils from superset.utils.core import is_test, NO_TIME_RANGE, parse_boolean_string from superset.utils.encrypt import SQLAlchemyUtilsAdapter from superset.utils.log import DBEventLogger @@ -1383,7 +1384,8 @@ def EMAIL_HEADER_MUTATOR( # pylint: disable=invalid-name,unused-argument CONTENT_SECURITY_POLICY_WARNING = True # Do you want Talisman enabled? -TALISMAN_ENABLED = True +TALISMAN_ENABLED = utils.cast_to_boolean(os.environ.get("TALISMAN_ENABLED", True)) + # If you want Talisman, how do you want it configured?? TALISMAN_CONFIG = { "content_security_policy": { diff --git a/superset/utils/core.py b/superset/utils/core.py index 80af7cde3c449..cd8c62efe7921 100644 --- a/superset/utils/core.py +++ b/superset/utils/core.py @@ -439,6 +439,8 @@ def cast_to_boolean(value: Any) -> bool | None: """ if value is None: return None + if isinstance(value, bool): + return value if isinstance(value, (int, float)): return value != 0 if isinstance(value, str): diff --git a/tests/unit_tests/utils/test_core.py b/tests/unit_tests/utils/test_core.py index 996bd1948f385..568595517c6bd 100644 --- a/tests/unit_tests/utils/test_core.py +++ b/tests/unit_tests/utils/test_core.py @@ -20,6 +20,7 @@ import pytest from superset.utils.core import ( + cast_to_boolean, is_test, parse_boolean_string, QueryObjectFilterClause, @@ -132,3 +133,41 @@ def test_is_test(): ) def test_parse_boolean_string(test_input: Optional[str], expected: bool): assert parse_boolean_string(test_input) == expected + + +def test_int_values(): + assert cast_to_boolean(1) is True + assert cast_to_boolean(0) is False + assert cast_to_boolean(-1) is True + assert cast_to_boolean(42) is True + assert cast_to_boolean(0) is False + + +def test_float_values(): + assert cast_to_boolean(0.5) is True + assert cast_to_boolean(3.14) is True + assert cast_to_boolean(-2.71) is True + assert cast_to_boolean(0.0) is False + + +def test_string_values(): + assert cast_to_boolean("true") is True + assert cast_to_boolean("TruE") is True + assert cast_to_boolean("false") is False + assert cast_to_boolean("FaLsE") is False + assert cast_to_boolean("") is False + + +def test_none_value(): + assert cast_to_boolean(None) is None + + +def test_boolean_values(): + assert cast_to_boolean(True) is True + assert cast_to_boolean(False) is False + + +def test_other_values(): + assert cast_to_boolean([]) is False + assert cast_to_boolean({}) is False + assert cast_to_boolean(object()) is False