Skip to content

Commit 8602053

Browse files
committed
Improve object mapping
Signed-off-by: christian.lutnik <[email protected]>
1 parent 9a9928b commit 8602053

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

providers/openfeature-provider-env-var/src/openfeature/contrib/provider/envvar/provider.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,13 @@ def resolve_object_details(
5959
default_value: typing.Union[dict, list],
6060
evaluation_context: typing.Optional[EvaluationContext] = None,
6161
) -> FlagResolutionDetails[typing.Union[dict, list]]:
62-
return _load_and_parse_env_var(flag_key, lambda v: json.loads(v))
62+
def parse(value: str) -> typing.Union[dict, list]:
63+
result = json.loads(value)
64+
if isinstance(result, dict) or isinstance(result, list):
65+
return result
66+
else:
67+
raise TypeError(
68+
f'Value for feature flag with key "${flag_key}" does not resolve to a JSON object or list'
69+
)
70+
71+
return _load_and_parse_env_var(flag_key, parse)

providers/openfeature-provider-env-var/tests/test_provider.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def test_unknown_flag_key_throws_flag_not_found_error():
1313
provider.resolve_boolean_details("unknown_flag_key", True, None)
1414

1515

16-
def test_string_flag_key_evaluates_the_flag():
16+
def test_string_flag_evaluates_the_flag():
1717
key = "test-flag-key"
1818
value = "test-value"
1919
os.environ[key] = value
@@ -24,7 +24,7 @@ def test_string_flag_key_evaluates_the_flag():
2424
assert result.value == value
2525

2626

27-
def test_int_flag_key_evaluates_the_flag():
27+
def test_int_flag_evaluates_the_flag():
2828
key = "test-flag-key"
2929
value = 324
3030
os.environ[key] = str(value)
@@ -35,7 +35,7 @@ def test_int_flag_key_evaluates_the_flag():
3535
assert result.value == value
3636

3737

38-
def test_float_flag_key_evaluates_the_flag():
38+
def test_float_flag_evaluates_the_flag():
3939
key = "test-flag-key"
4040
value = 324.34
4141
os.environ[key] = str(value)
@@ -46,7 +46,7 @@ def test_float_flag_key_evaluates_the_flag():
4646
assert result.value == value
4747

4848

49-
def test_boolean_flag_key_evaluates_the_flag():
49+
def test_boolean_flag_evaluates_the_flag():
5050
key = "test-flag-key"
5151
value = True
5252
os.environ[key] = str(value)
@@ -57,7 +57,7 @@ def test_boolean_flag_key_evaluates_the_flag():
5757
assert result.value == value
5858

5959

60-
def test_object_flag_key_evaluates_the_flag():
60+
def test_object_flag_evaluates_the_flag():
6161
key = "test-flag-key"
6262
value = {"a": 23}
6363
os.environ[key] = str(json.dumps(value))
@@ -68,6 +68,17 @@ def test_object_flag_key_evaluates_the_flag():
6868
assert result.value == value
6969

7070

71+
def test_object_flag_with_invalid_json_object_raises_an_error():
72+
key = "test-flag-key"
73+
value = 23
74+
os.environ[key] = str(json.dumps(value))
75+
76+
provider = EnvVarProvider()
77+
78+
with pytest.raises(TypeError):
79+
provider.resolve_object_details(key, True, None)
80+
81+
7182
def test_provider_returns_correct_metadata():
7283
provider = EnvVarProvider()
7384
metadata = provider.get_metadata()

0 commit comments

Comments
 (0)