Skip to content

Commit 2a15dd5

Browse files
committed
improve error handling
Signed-off-by: christian.lutnik <[email protected]>
1 parent d11db98 commit 2a15dd5

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.12
1+
3.9

providers/openfeature-provider-env-var/pyproject.toml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "openfeature-provider-env-var"
33
version = "0.1.0"
44
description = "OpenFeature Python Environment Variable Provider"
55
readme = "README.md"
6-
requires-python = ">=3.12"
6+
requires-python = ">=3.9"
77
dependencies = [
88
"openfeature-sdk>=0.6.0",
99
]
@@ -13,9 +13,6 @@ authors = [{ name = "OpenFeature", email = "[email protected]" }]
1313
requires = ["hatchling"]
1414
build-backend = "hatchling.build"
1515

16-
[tool.ruff.lint]
17-
extend-select = ["B"]
18-
1916
[dependency-groups]
2017
dev = [
2118
"pytest>=8.3.5",

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import json
2-
import typing
32
import os
3+
import typing
44

55
from openfeature.evaluation_context import EvaluationContext
6-
from openfeature.exception import FlagNotFoundError
6+
from openfeature.exception import FlagNotFoundError, ParseError
77
from openfeature.flag_evaluation import FlagResolutionDetails, Reason
88
from openfeature.provider import AbstractProvider, Metadata
99

@@ -14,7 +14,15 @@ def _load_and_parse_env_var(
1414
value = os.environ.get(flag_key)
1515
if value is None:
1616
raise FlagNotFoundError()
17-
return FlagResolutionDetails(parse(value), None, None, Reason.DEFAULT, None, {})
17+
18+
try:
19+
parsed = parse(value)
20+
except ValueError as error:
21+
raise ParseError(
22+
f'Error decoding object for flag with key "${flag_key}"'
23+
) from error
24+
25+
return FlagResolutionDetails(parsed, None, None, Reason.DEFAULT, None, {})
1826

1927

2028
class EnvVarProvider(AbstractProvider):
@@ -61,10 +69,11 @@ def resolve_object_details(
6169
) -> FlagResolutionDetails[typing.Union[dict, list]]:
6270
def parse(value: str) -> typing.Union[dict, list]:
6371
result = json.loads(value)
64-
if isinstance(result, dict) or isinstance(result, list):
72+
73+
if isinstance(result, (dict, list)):
6574
return result
6675
else:
67-
raise TypeError(
76+
raise ParseError(
6877
f'Value for feature flag with key "${flag_key}" does not resolve to a JSON object or list'
6978
)
7079

0 commit comments

Comments
 (0)