diff --git a/packages/reflex-base/src/reflex_base/environment.py b/packages/reflex-base/src/reflex_base/environment.py index 33461cc19fc..9381d064515 100644 --- a/packages/reflex-base/src/reflex_base/environment.py +++ b/packages/reflex-base/src/reflex_base/environment.py @@ -405,7 +405,13 @@ def __init__(self, name: str, default: Any, type_: T) -> None: name: The environment variable name. default: The default value. type_: The type of the value. + + Raises: + ValueError: If the name is not fully uppercase. """ + if not name.isupper(): + msg = f"Environment variable name must be uppercase: {name!r}" + raise ValueError(msg) self.name = name self.default = default self.type_ = type_ diff --git a/tests/units/test_environment.py b/tests/units/test_environment.py index d3f93165957..b5b477d5fcd 100644 --- a/tests/units/test_environment.py +++ b/tests/units/test_environment.py @@ -437,6 +437,27 @@ def test_set_list_value(self): del os.environ["TEST_VAR"] +@pytest.mark.parametrize("name", ["test_var", "Test_Var", "tEST_VAR", "reflex_use_npm"]) +def test_env_var_name_not_uppercase_raises(name): + """Test that a non-uppercase environment variable name is rejected. + + Args: + name: The invalid environment variable name. + """ + with pytest.raises(ValueError, match="must be uppercase"): + EnvVar(name, "default", str) + + +@pytest.mark.parametrize("name", ["TEST_VAR", "__INTERNAL_VAR", "VAR_2"]) +def test_env_var_name_uppercase_accepted(name): + """Test that fully uppercase environment variable names are accepted. + + Args: + name: The valid environment variable name. + """ + assert EnvVar(name, "default", str).name == name + + class TestEnvVarDescriptor: """Test the env_var descriptor."""