def test_env_get_defaults(): """Verify the rather complex rules for env.get("<envvar>",default) value when envvar is not defined. """ env = Env(TEST1=0) env.register("TEST_REG", default="abc") env.register("TEST_REG_DNG", default=DefaultNotGiven) # var is defined, registered is don't-care => value is defined value assert env.get("TEST1", 22) == 0 # var not defined, not registered => value is immediate default assert env.get("TEST2", 22) == 22 assert "TEST2" not in env # var not defined, is registered, reg default is not sentinel => value is *registered* default assert env.get("TEST_REG", 22) == "abc" assert "TEST_REG" in env # var not defined, is registered, reg default is sentinel => value is *immediate* default assert env.get("TEST_REG_DNG", 22) == 22 assert "TEST_REG_DNG" not in env
def test_deregister_custom_var(): env = Env() env.register("MY_SPECIAL_VAR", type="path") env.deregister("MY_SPECIAL_VAR") assert "MY_SPECIAL_VAR" not in env env.register("MY_SPECIAL_VAR", type="path") paths = ["/home/wakka", "/home/wakka/bin"] env["MY_SPECIAL_VAR"] = paths env.deregister("MY_SPECIAL_VAR") # deregistering a variable that has a value set doesn't # remove it from env; # the existing variable also maintains its type validation, conversion assert "MY_SPECIAL_VAR" in env with pytest.raises(TypeError): env["MY_SPECIAL_VAR"] = 32 # removing, then re-adding the variable without registering # gives it only default permissive validation, conversion del env["MY_SPECIAL_VAR"] env["MY_SPECIAL_VAR"] = 32
def test_env_detype_no_dict(): env = Env(YO={"hey": 42}) env.register("YO", validate=always_true, convert=None, detype=None) det = env.detype() assert "YO" not in det
def test_env_iterate(): env = Env(TEST=0) env.register(re.compile("re")) for key in env: assert isinstance(key, str)
def test_register_custom_var_str(val, converted): env = Env() env.register("MY_SPECIAL_VAR", type="str") env["MY_SPECIAL_VAR"] = val assert env["MY_SPECIAL_VAR"] == converted